2012-01-24 10 views
5

मैं हमारे पास कुछ विरासत कोड देख रहा था और मैंने कुछ ऐसा देखा जो मुझे विशेष रूप से अजीब के रूप में मारा।वीबीएनईटी इंटरफेस इंस्टेंटेशन विषमता

कहें कि हमारे पास ठोस वर्ग है। इंटरफ़ेस ITestClass लागू करता है।

निम्नलिखित मामले में मुझे किस तरह के व्यवहार की उम्मीद करनी चाहिए? (मुझे नहीं पता था यह भी संभव हो गया था)

Dim testClass as TestClass = Nothing 
Try 
    testClass = New ITestClass 
    ... 
End Try 

जहां तक ​​मैं समझता हूँ, आप इसके इंटरफेस समकक्ष के बजाय TestClass उपयोग करने के लिए मजबूर किया जाएगा।

+0

आप _certain_ हैं 'ITestClass' एक अंतरफलक है? क्या आप इसके लिए कोड पोस्ट कर सकते हैं? – Oded

+0

जब मैं विजुअल स्टूडियो में 'आईटेस्ट क्लास' पर होवर करता हूं, टूलटिप का कहना है कि यह एक इंटरफ़ेस है। जब मैं 'टेस्ट क्लास' पर होवर करता हूं तो यह कहता है कि यह एक वर्ग है। –

उत्तर

8

एक विशेष मामला है, जहां एक इंटरफ़ेस को कक्षा की तरह तत्काल किया जा सकता है, और यह CoClassAttribute से संबंधित है। ब्लॉग पोस्ट वीबी में अनुवाद से

उदाहरण:: जानकारी के लिए इस ब्लॉग पोस्ट देखें

<ComImport(), Guid("C906C002-B214-40d7-8941-F223868B39A5"), CoClass(GetType(Foo))> _ 
Public Interface IFoo 
End Interface 

Public Class Foo 
    Implements IFoo 
End Class 

Sub Main() 
    Dim f As New IFoo() ' Compiles 
End Sub 
+4

वाह। भाषा सुविधाओं का क्या विकृति :) – Oded

+0

वाह ... मैं डीएलएल में प्रतिबिंबित हूं और यह वही है जो चल रहा है। यह अजीब है। –

+0

मैंने लंबे समय से सोचा है कि एक इंटरफेस के साथ जोड़ा गया "सह-वर्ग" की अवधारणा होनी चाहिए; * उपभोक्ता * दृष्टिकोण से, इंटरफेस और कक्षाओं के बीच एकमात्र अंतर यह तथ्य है कि इंटरफेस में स्थिर विधियां या निर्माता नहीं हो सकते हैं; मेरे दिमाग में, यह साफ होगा कि वहां कोई फर्क नहीं पड़ता है। क्या सह-वर्ग स्थिर तरीकों को उपलब्ध करा सकते हैं? क्या अतिरिक्त आयात की आवश्यकता के बिना इंटरफ़ेस पर उपलब्ध सह-वर्ग बनाने के विस्तार विधियों के लिए कोई उचित पैटर्न होगा? – supercat