জেনেরিক বেস শ্রেণি থেকে উত্তরাধিকারী, সীমাবদ্ধতা প্রয়োগ করুন এবং সি # তে একটি ইন্টারফেস প্রয়োগ করুন


117

এটি একটি বাক্য গঠন প্রশ্ন। আমার জেনেরিক ক্লাস রয়েছে যা জেনেরিক বেস ক্লাস থেকে উত্তরাধিকার সূত্রে প্রাপ্ত এবং টাইপ পরামিতিগুলির মধ্যে একটিতে সীমাবদ্ধতা প্রয়োগ করছে। আমি ডেরিভেড ক্লাসটিও একটি ইন্টারফেস প্রয়োগ করতে চাই। আমার জীবনের জন্য, আমি সঠিক সিনট্যাক্সটি খুঁজে বের করতে পারি না।

এটি আমার কাছে রয়েছে:

DerivedFoo<T1,T2> : ParentFoo<T1, T2> where T2 : IBar { ... }

প্রথম যে বিষয়টি মনে পড়ল তা হ'ল:

DerivedFoo<T1,T2> : ParentFoo<T1, T2> where T2 : IBar, IFoo { ... }

তবে এটি ভুল কারণ এটি আই 2 এবং আইএফও উভয়ই প্রয়োগ করতে হবে, আইফো বাস্তবায়নের জন্য ডেরিভডফু নয়।

আমি কিছুটা গুগলিং, কলোন, সেমিকোলন ইত্যাদির ব্যবহার চেষ্টা করেছি, তবে আমি সংক্ষিপ্ত হয়ে গেছি। আমি নিশ্চিত উত্তরটি চড় মারার মতো সহজ।


আমি একবার তাকালে আমি @ অ্যাডামের উত্তর বুঝতে পারি না তবে 2 মিনিটের পরে আমি কী তা পেতে পারি, উত্তরের জন্য আপনাকে ধন্যবাদ উত্পন্ন শ্রেণীর একাধিক বাস্তবায়ন থাকতে পারে এটি হ'ল পয়েন্ট। যাইহোক আমি অন্যের জন্য এটি স্বরলিপি প্রদর্শন করতে চাই। "শ্রেণি ডেরিভডক্লাস <টাইপ>: প্যারেন্টক্লাস যেখানে প্রকার: আইটি টাইপ"। সর্বশেষ বাস্তবায়িত শ্রেণি এবং যেখানে ধারাটির মধ্যে কিছুই হওয়া উচিত নয়।
নুরাইজগিন

উত্তর:


173

জেনেরিক সীমাবদ্ধতাগুলি সংজ্ঞায়িত করার আগে আপনি আপনার শ্রেণীর পুরো স্বাক্ষর অন্তর্ভুক্ত করেন।

class DerivedFoo<T1, T2> : ParentFoo<T1, T2>, IFoo where T2 : IBar
{
    ...
}

5
অন্যের কাছে, আমি এটিকে অভ্যন্তরীণ করে রেখেছি, ক্লাস কেবল সেখানেই ক্লজ পেয়েছে যেখানে এটি ক্লোজ হয়ে গেছে, এবং এটি কোনও জেনেরিক ধরণের সীমাবদ্ধতার জন্য শেষ দিকে যায়।
অ্যান্ডি ভি

@ ভিজার এটির একাধিক যেখানে ক্লজ, ক্লাস টেস্ট <টি 1, টি 2> যেখানে টি 1: ইন্টারফেস 1 যেখানে টি 2: ইন্টারফেস 2
'23-এ

@ ভিজার হ্যাঁ, কী বলছে, প্রতিটি যেখানে ক্লজের একাধিক বাধা থাকতে পারে… তাই মূল পোস্টের বাক্য গঠনটি সঠিক, এর অর্থ হ'ল অপরটি কিছু আলাদা। where T2 : IBar, IFoo কেবলমাত্র T2এটির অর্থ প্রয়োগের পরিবর্তে উভয় ইন্টারফেস DerivedFoo<T1,T2> প্রয়োগ করতে হবেIFoo
v01pe

18

আমার প্রস্তাবনা: যখন আপনার সি # ভাষার সিনট্যাক্স সম্পর্কে প্রশ্ন রয়েছে, স্পেসিফিকেশনটি পড়ুন; এজন্যই আমরা এটি প্রকাশ করি। আপনি বিভাগ 10.1 পড়তে চাইবেন।

আপনার নির্দিষ্ট প্রশ্নের উত্তর দিতে, শ্রেণি ঘোষণায় জিনিসগুলির ক্রম হ'ল:

  • বর্গাকার বন্ধনীগুলিতে বৈশিষ্ট্য
  • সংশোধক ("পাবলিক", "স্ট্যাটিক", এবং আরও)
  • "আংশিক"
  • "শ্রেণী"
  • বর্গ নাম
  • কোণ বন্ধনীগুলির মধ্যে প্রকারের পরামিতি ঘোষণার একটি কমা-বিচ্ছিন্ন তালিকা
  • একটি কোলন বেস প্রকারের কমা দ্বারা বিচ্ছিন্ন তালিকার অনুসরণ করে (বেস শ্রেণি এবং প্রয়োগকৃত ইন্টারফেস, বেস থাকলে অবশ্যই প্রথম শ্রেণি যেতে হবে)
  • পরামিতি সীমাবদ্ধতা টাইপ করুন
  • ধনুর্বন্ধনী দ্বারা বেষ্টিত বর্গের শরীর,
  • একটি সেমিকোলন

"শ্রেণি", নাম এবং শরীর ব্যতীত সেই তালিকার সমস্ত কিছুই alচ্ছিক, তবে যদি এটি প্রদর্শিত হয় তবে সবকিছু অবশ্যই সেই ক্রমে উপস্থিত থাকতে হবে।


95
এরিক, আমি আপনাকে একজন পেশাদার হিসাবে শ্রদ্ধা জানাতে এবং আপনার প্রতিক্রিয়াটির প্রশংসা করি, তবে আমি সহায়তা করতে পারি না তবে ক্ষতিকারক উত্তর হিসাবে যা আসে সে সম্পর্কে হতাশ হতে পারি। এমএসডিএন-তে একটি লিঙ্ক বন্ধ করে দেওয়া অত্যন্ত প্রযুক্তিগত 503 পৃষ্ঠার ওয়ার্ড ডকুমেন্টের মাধ্যমে একটি প্রোগ্রামিং প্রশ্নোত্তর সাইটের উপরে একটি প্রশ্ন জিজ্ঞাসা করার জন্য আপনি আমার সমালোচনা করছেন। বেশ রুক্ষ। এটি আমার সময়ের সর্বাধিক দক্ষ ব্যবহার ছিল এবং এটির অতিরিক্ত সুবিধা রয়েছে যা এটি পরে অন্য কাউকে সাহায্য করতে পারে। আগ্রহীদের জন্য সি # ল্যাং স্পিকে
ড্যান রিগবি

17
কোন সমালোচনা উদ্দেশ্য ছিল না। খাঁটি-পাঠ্য যোগাযোগের ক্ষেত্রে একটি বিস্তৃত পক্ষপাত রয়েছে যা তথ্যগুলির সরল বক্তব্যকে উজ্জ্বল এবং ঘৃণ্য করে তোলে; সহায়ক তথ্যগুলির একটি তালিকা উপস্থাপন করার সময় আমি দানযোগ্যভাবে পড়ার চেষ্টা করি এবং আপনাকেও এটি করার পরামর্শ দিচ্ছি। আমি আমার সুপারিশের পাশে দাঁড়িয়েছি; সিনট্যাক্স সম্পর্কে আপনার যদি প্রশ্ন থাকে তবে স্পেসটি তাদের নির্দিষ্টভাবে উত্তর দেয় এবং নির্দিষ্ট বাক্য গঠনগুলির সংজ্ঞা নির্ধারণের জন্য সামগ্রীর সহায়ক টেবিল দিয়ে শুরু হয়।
এরিক লিপার্ট

3
ড্যান, সি # স্পেস সন্ধান করা গুগলে 'সি # স্পেস' প্রবেশ করা এবং 'আমি ভাগ্যবান' বোতামটি টিপানোর মতোই সহজ। এবং আপনি যদি পেশাদার সি # বিকাশকারী হন তবে আপনার মেশিনে পিডিএফ ফর্ম্যাটে আপনার ইতিমধ্যে সি # স্পেস থাকা উচিত। এছাড়াও, আমি আপনাকে সমালোচনা করতে চাই না। আমার আগে স্পেক পড়ার অভ্যাস ছিল না তবে আমি জোন, এরিক এবং পাভেলকে ধন্যবাদ দিয়ে পড়া শুরু করেছি যারা সর্বদা যে কোনও প্রশ্নের জন্য সি # স্পেসের উদ্ধৃতি দেয়। আমি দেখতে পেয়েছি যে সি # স্পেস, যদিও এটি সময়ে পড়া খুব কঠিন হতে পারে, ভাষা সম্পর্কে শেখার একটি দুর্দান্ত উপায়।
সমাধান

@ এরিক লিপার্ট: যথেষ্ট ফর্সা। ধন্যবাদ তোমার উত্তরের জন্য. গঠনমূলক পরামর্শ হিসাবে, মাইক্রোসফ্ট আলাদা আলাদা ডাউনলোড হিসাবে উপস্থিত থাকার পাশাপাশি স্পেসিফিকেশনটির বিষয়বস্তু সরাসরি এমএসডিএন-তে সংহত করে যদি তা কার্যকর হয়। ভিজ্যুয়াল স্টুডিও। নেট এমএসডিএন সংস্করণটিতে স্পেসিফিকেশনের একটি সংহত সংস্করণ রয়েছে তবে পরবর্তী সংস্করণগুলি নয়। আমি অ্যান্ডারস হিজলবার্গের বইটি কেনার বিষয়ে চিন্তাভাবনা করেছি, তবে নেট নেট with.০ দিয়ে কোণায় আমি এখনও অনিচ্ছুক। amazon.com/C- প্রোগ্রামগ্রামিং- ভাষা ৩-৩০/dp/0321562992 ধন্যবাদ।
ড্যান রিগবি

2
সি ++ এর জন্য একটি সেমিকোলনে একটি শ্রেণির ঘোষণা শেষ হওয়া আবশ্যক। অনেক সি # বিকাশকারী একটি সি ++ ব্যাকগ্রাউন্ড থেকে আসে; কখনও কখনও তাদের আঙ্গুলগুলি মস্তিস্কে জড়িত না হয়ে সেমিকোলনটি .ুকিয়ে দেয়। :-) সি # তে বেশ কয়েকটি কনস্ট্রাক্ট রয়েছে যা একটি alচ্ছিক অর্ধেক নেয় যেখানে সি ++ এর প্রয়োজন হয়। এটি প্রায় একটি সূক্ষ্ম সুবিধা। আমি মনে করি এটি কোনও ধরণের ঘোষণাপত্রের বিপরীতে কোনও পদ্ধতি বডি ঘোষণার কথা বলতে গেলে আপনাকে সূক্ষ্মভাবে কল করতে দেয়।
এরিক লিপার্ট


2
public class KeyAndValue<T>
{
    public string Key { get; set; }
    public virtual T Value { get; set; }
}

public class KeyAndValue : KeyAndValue<string>
{
    public override string Value { get; set; }
}

এটি বিদ্যমান উত্তরগুলির বাইরে একটি এক্সটেনশন। stringআপনি কোনও ধরণের সরবরাহ না করলে এটি ডিফল্ট হয় । আমি কোনও ইন্টারফেস বাস্তবায়ন করি নি তবে এর জন্য স্বাভাবিকের চেয়ে আলাদা কিছু লাগবে না।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.