2010-10-19 12 views
7

में से एक में मैं एक अंतरफलक हैC# इंटरफ़ेस में enum लागू और इंटरफ़ेस की विधि हस्ताक्षर

इंटरफ़ेस:

interface IThing 
{ 
    Enum MyEnum {get;set;} 
    string DoAction(MyEnum enumOptionChosen, string valueToPassIn); 
} 

कंक्रीट कार्यान्वयन:

public class Thing : IThing 
{ 
    public enum MyEnum 
    { 
    FirstOption, 
    SecondOption, 
    ThirdOption 
    } 

    string doAction(MyEnum enumOptionChosen, string valueToPassIn) 
    { 
    switch(enumOptionChosen) 
    { 
     case MyEnum.FirstOption: 
     x(); 
     break; 
     case MyEnum.SecondOption: 
     y(); 
     break; 
     case MyEnum.ThirdOption: 
     z(); 
     break; 
    } 
    } 
} 

जब मैं इस मैं संकलन की कोशिश ' IThing.MyEnum 'एक' संपत्ति 'है लेकिन एक' प्रकार 'की तरह प्रयोग किया जाता है। मुझे DoAction() हस्ताक्षर में Enum के उपयोग की आवश्यकता होने के बारे में कुछ याद आ रही है।

किसी भी मदद के लिए धन्यवाद।

+0

Btw, त्रुटि इंटरफेस में होता है कार्यान्वयन में नहीं। हालांकि इंटरफ़ेस का उपयोग करते समय – 0bytes

उत्तर

15

आपके इंटरफ़ेस में MyEnum वेरिएबल का नाम प्रकार नहीं है, इसलिए यह कंपाइलर द्वारा पहचाना नहीं जाएगा। ऐसा करने के लिए आपको जेनेरिक का उपयोग करने में सक्षम होना चाहिए।

public interface IThing<T> 
{ 
    T MyEnum { get; set; } 
    string doAction(T enumOptionChosen, string valueToPassIn); 
} 

तो फिर तुम इसे इस तरह लागू हो सकते हैं:

public interface IThing<T> 
{ 
    T MyEnum { get; set; } 
    string doAction(T enumOptionChosen, string valueToPassIn); 
} 

public class Something : IThing<Something.SpecialEnum> 
{ 
    public enum SpecialEnum 
    { 
     Item1, 
     Item2, 
     Item3 
    } 

    public SpecialEnum MyEnum { get; set; } 

    public string doAction(SpecialEnum enumOptionChosen, string valueToPassIn) 
    { 
     return "something"; 
    } 
} 
+1

टी का उपयोग किया जाना चाहिए। –

3

सबसे पहले, इंटरफ़ेस/कंक्रीट के बाहर अपना enum घोषित करें।

MyEnum SomeNum {get; set;} 
फिर अपने वर्ग में

:

फिर अपने इंटरफेस में

public MyEnum SomeNum 
{ 
    get 
    { 
    ... 
    } 
    set 
    { 
     ... 
    } 
} 

आपका मुख्य समस्या यह है कि आप, जब आप अपने इंटरफेस से "enum" का एक वापसी प्रकार की घोषणा करने के प्रयास कर रहे थे गया था "माईएनम" का रिटर्न प्रकार घोषित करना चाहिए।

याद रखें, enum एक प्रकार है। आप एक वर्ग को "प्रकार", केवल गुण/विधियों को लागू करने के लिए मजबूर नहीं कर सकते हैं।

कहा जा रहा है कि, मैं अपने सिर को खरोंच कर रहा हूं और यह पता लगाने के लिए कि आप क्या करने की कोशिश कर रहे हैं।

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