c# - क्या एक्सटेंशन विधियों को इंटरफेस पर लागू किया जा सकता है?



.net interface (1)

क्या इंटरफ़ेस में एक्सटेंशन विधि लागू करना संभव है? (सी # प्रश्न)

उदाहरण के लिए यह निम्नलिखित प्राप्त करने के लिए है:

  1. एक आईटोपोलॉजी इंटरफ़ेस बनाएं

  2. इस इंटरफ़ेस के लिए एक एक्सटेंशन विधि बनाएं (उदाहरण के लिए सार्वजनिक स्थैतिक int CountNodes (यह आईटोपोलॉजी टोपोलॉजी अगर))

  3. फिर जब एक वर्ग (उदाहरण के लिए MyGraph) बनाते हैं जो आईटोपोलॉजी लागू करता है, तो यह स्वचालित रूप से गणना नोड एक्सटेंशन होगा।

इस प्रकार इंटरफ़ेस को लागू करने वाले वर्गों में एक्सटेंशन विधि में परिभाषित किए गए कार्यों के साथ संरेखित करने के लिए सेट क्लास नाम नहीं होना चाहिए।


बेशक वे कर सकते हैं; अधिकांश लिंक इंटरफ़ेस एक्सटेंशन विधियों के आसपास बनाया गया है।

इंटरफेस वास्तव में विस्तार विधियों के विकास के लिए ड्राइविंग बलों में से एक थे; चूंकि वे अपनी किसी भी कार्यक्षमता को लागू नहीं कर सकते हैं, इसलिए विस्तार विधियां इंटरफ़ेस परिभाषाओं के साथ वास्तविक कोड को जोड़ने का सबसे आसान तरीका हैं।

Enumerable IEnumerable<T> आसपास बनाए गए विस्तार विधियों के पूरे संग्रह के लिए Enumerable वर्ग देखें। एक को लागू करने के लिए, यह कक्षा के लिए एक को लागू करने जैसा ही है:

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

जहां तक ​​इंटरफेस का संबंध है, विस्तार विधियों के बारे में विशेष रूप से कुछ भी अलग नहीं है; एक विस्तार विधि केवल एक स्थैतिक विधि है कि संकलक कुछ सिंटैक्टिक चीनी लागू करता है ताकि इसे विधि प्रकार की तरह दिखने के लिए लक्ष्य प्रकार का हिस्सा हो।





extension-methods