2008-10-07 16 views
7

में कनवर्ट करने के लिए कैसे करें मेरे पास निम्न VB.net इंटरफ़ेस है जिसे मुझे सी # पर पोर्ट करने की आवश्यकता है। सी # इंटरफेस में गणना की अनुमति नहीं देता है। मैं इस इंटरफेस का उपयोग करने वाले कोड को बदलने के बिना इसे कैसे बंद कर सकता हूं?VB.net इंटरफ़ेस को enum से C#

Public Interface MyInterface 

    Enum MyEnum 
     Yes = 0 
     No = 1 
     Maybe = 2 
    End Enum 

    ReadOnly Property Number() As MyEnum 

End Interface 

उत्तर

11

संक्षेप में, आप, कोड को तोड़ने के बिना है कि इंटरफ़ेस परिवर्तित नहीं कर सकते क्योंकि सी # कर सकते हैं इंटरफेस में नहीं प्रकार घोंसला। ,

class TestClass3 : TestInterfaces.MyInterface 
{ 

    TestInterfaces.MyInterface.MyEnum TestInterfaces.MyInterface.Number 
    { 
     get { throw new Exception("The method or operation is not implemented."); } 
    } 

} 

लेकिन जब से सी # नहीं इंटरफेस के अंदर घोंसला प्रकार, यदि आप प्रगणक से बाहर तोड़ कर सकते हैं: आप VB.NET संस्करणों के इंटरफ़ेस को लागू करते हैं, तो आप को निर्दिष्ट है कि संख्या MyInterface.MyEnum का एक प्रकार वापस आ जाएगी रहे हैं इंटरफ़ेस, आप एक अलग डेटा प्रकार वापस कर देंगे: इस मामले में, MyEnum।

class TestClass2 : IMyInterface 
{ 

    MyEnum IMyInterface.Number 
    { 
     get { throw new Exception("The method or operation is not implemented."); } 
    } 

} 

पूरी तरह से योग्य प्रकार के नाम का उपयोग करने के बारे में सोचें। VB.NET इंटरफ़ेस में, आप

MyProject.MyInterface.MyEnum

की वापसी प्रकार सी # इंटरफ़ेस में है, तो आप के लिए है:

MyProject.MyEnum।

दुर्भाग्य से, कोड जो VB.NET इंटरफ़ेस को लागू करता है उसे इस तथ्य का समर्थन करने के लिए बदला जाना चाहिए कि MyInterface.Number द्वारा लौटाया गया प्रकार बदल गया है।

आईएल इंटरफेस के अंदर नेस्टिंग प्रकार का समर्थन करता है, इसलिए यह एक रहस्य है क्यों सी # नहीं करता है:

.class public interface abstract auto ansi MyInterface 

{ .property उदाहरण ValueType TestInterfaces.MyInterface/MyEnum संख्या { .Get उदाहरण ValueType TestInterfaces.MyInterface/MyEnum TestInterfaces.MyInterface :: get_Number() }

.class auto ansi sealed nested public MyEnum 
    extends [mscorlib]System.Enum 

{ .field सार्वजनिक स्थिर शाब्दिक va luetype TestInterfaces.MyInterface/MyEnum शायद = int32 (2)

.field public static literal valuetype TestInterfaces.MyInterface/MyEnum No = int32(1) 

    .field public specialname rtspecialname int32 value__ 

    .field public static literal valuetype TestInterfaces.MyInterface/MyEnum Yes = int32(0) 

} 

}

आपको लगता है कि इस इंटरफेस का उपयोग करने के अन्य विधानसभाओं में कोड के बहुत सारे है, तो आपका सर्वश्रेष्ठ दांव यह एक अलग अंदर रखने के लिए है वीबीएनईटी असेंबली, और इसे अपने सी # परियोजनाओं से संदर्भित करें। अन्यथा, इसे परिवर्तित करना सुरक्षित है, लेकिन आपको अलग-अलग प्रकार को वापस करने के लिए इसका उपयोग करने वाले किसी भी कोड को बदलना होगा।

13
public enum MyEnum 
{ 
    Yes = 0, 
    No = 1, 
    Maybe = 2 
} 

public interface IMyInterface 
{ 
    MyEnum Number { get; } 
} 
+0

यह इंटरफ़ेस का उपयोग कर रहे कोड को तोड़ देता है। यदि संभव हो तो मैं इससे बचना चाहूंगा। – user25825

संबंधित मुद्दे