ইন্টারফেসে এক্সটেনশন পদ্ধতি প্রয়োগ করা যেতে পারে?


123

ইন্টারফেসে কোনও এক্সটেনশন পদ্ধতি প্রয়োগ করা কি সম্ভব? (সি # প্রশ্ন)

এটি নিম্নলিখিত অর্জনের জন্য উদাহরণস্বরূপ:

  1. একটি আইটোপোলজি ইন্টারফেস তৈরি করুন

  2. এই ইন্টারফেসের জন্য একটি এক্সটেনশন পদ্ধতি তৈরি করুন (যেমন পাবলিক স্ট্যাটিক ইন্ট কাউন্টনডস (এই আইটোপোলজি টপোলজিআইফ))

  3. তারপরে একটি ক্লাস তৈরি করার সময় (যেমন মাইগ্রাফ) যা আইটোপোলজি প্রয়োগ করে, তারপরে এটি স্বয়ংক্রিয়ভাবে কাউন্ট নোডের এক্সটেনশন হবে।

এইভাবে ইন্টারফেস প্রয়োগকারী ক্লাসগুলির এক্সটেনশন পদ্ধতিতে যা সংজ্ঞায়িত হয়েছিল তার সাথে সারিবদ্ধ হওয়ার জন্য একটি সেট শ্রেণীর নাম থাকতে হবে না।

উত্তর:


188

অবশ্যই তারা পারে; লিনাকের বেশিরভাগ অংশ ইন্টারফেস এক্সটেনশন পদ্ধতিগুলিতে নির্মিত built

ইন্টারফেসগুলি আসলে সম্প্রসারণ পদ্ধতির বিকাশের অন্যতম চালিকা শক্তি ছিল; যেহেতু তারা তাদের নিজস্ব কার্যকারিতা কোনও প্রয়োগ করতে পারে না তাই এক্সটেনশন পদ্ধতি হ'ল প্রকৃত কোডটি ইন্টারফেস সংজ্ঞাগুলির সাথে সংযুক্ত করার সহজ উপায়।

চারপাশে নির্মিত এক্সটেনশন পদ্ধতির পুরো সংগ্রহের জন্য গণ্যমান শ্রেণীটি দেখুন IEnumerable<T>। একটি বাস্তবায়নের জন্য, এটি একটি শ্রেণীর জন্য একটি বাস্তবায়নের সমান:

public static class TopologyExtensions
{
    public static void CountNodes(this ITopology topology)
    {
        // ...
    }
}

ইন্টারফেসের সাথে সম্পর্কিত হিসাবে এক্সটেনশন পদ্ধতিগুলি সম্পর্কে বিশেষত আলাদা কিছু নেই; একটি এক্সটেনশন পদ্ধতিটি কেবল একটি স্থিতিশীল পদ্ধতি যা সংকলকটি পদ্ধতিটির ধরণের অংশের মতো দেখতে এমন কিছু সিনট্যাকটিক চিনি প্রয়োগ করে।


33
পুনরায়: "অবশ্যই" - আমি মনে করি যে প্রশ্নটি স্থাপত্য গন্ধটি প্রকাশ করে যা আপনি স্পষ্টভাবে উল্লেখ করেছেন। যদি আপনার ইন্টারফেসগুলিতে এক্সটেনশন থাকতে পারে তবে কেন ইন্টারফেসগুলিতে প্রয়োগকৃত পদ্ধতি থাকতে পারে না? ইন্টারফেসের মধ্যে কংক্রিট পদ্ধতি থাকতে সক্ষম হওয়া উচিত বলে মনে করা বোধগম্য, অথবা একবার আপনি জানেন যে তারা পারবেন না, মনে করুন যে এক্সটেনশন পদ্ধতিগুলিকে একটি টেকসই ক্লেজ হিসাবে অনুমতি দেওয়া উচিত নয়। (কিন্তু তারা আপনার চমৎকার উত্তর তর্ক নয়, ন্যায্য ও IEnum না লিঙ্কটি "অবশ্যই"। LINQ ;। ^ ডি) কিছু দুর্গন্ধযুক্ত আছে!
রাফিন

@Ruffin মন্তব্যে নিউজ যুক্ত করতে চান যে আপনি এখন সি # ইন্টারফেস পদ্ধতিতে ডিফল্ট প্রয়োগগুলি যুক্ত করতে পারেন। সূত্র: devblogs.microsoft.com/dotnet/…
ভিনিগাস

@ আরফিন আমি সি # তে এটি সবচেয়ে বিভ্রান্তিকর স্থাপত্য সিদ্ধান্তটি পেয়েছি। কখনও কখনও এটি অর্ধ-শ্রেণীর অর্ধ-ইন্টারফেস কাঠামো চারদিকে জগাখিচু হয়ে শেষ হয়। তবুও, আমি বিশ্বাস করি যখন কার্যকরী প্রোগ্রামিং দৃষ্টিকোণ থেকে যোগাযোগ করা এবং কার্যকারিতা বাস্তবায়নের পরিবর্তে ইন্টারফেসগুলিতে ইউটিলিটিগুলি প্রবর্তনের জন্য ব্যবহৃত হয় তখন এটি কার্যকর হতে পারে।
Guney Ozsan
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.