2012-01-18 11 views
5

मेरे पास एक उपकरण द्वारा उत्पन्न आंशिक वर्ग है।व्युत्पन्न कक्षा में या आंशिक कक्षाओं के माध्यम से इंटरफ़ेस को कैसे कार्यान्वित करें?

Foo.cs

public partial class Foo { 
    [SomeAttribute()] 
    public string Bar {get;set;} 
} 

मैं बिना छुए Foo.cs Foo निम्नलिखित इंटरफ़ेस को लागू करने की जरूरत है:

IFoo.cs

public interface IFoo { 
    string Bar {get;set;} 
} 

विस्तार Foo है एक विकल्प भी, लेकिन फिर से कार्यान्वित करना Bar संपत्ति नहीं है।

क्या यह किया जा सकता है?

+0

आप फू का विस्तार क्यों नहीं कर सकते: IFoo, यदि आप यही पूछ रहे हैं? – Tigran

+0

@ टिग्रान: मैं Foo.cs फ़ाइल को छू नहीं सकता – Ropstah

+0

@ डीबीएम: जैसा कि कहा गया है .. 'बार' सार्वजनिक होना चाहिए – Ropstah

उत्तर

8

क्या आपको इसे फिर से किसी अन्य फ़ाइल में करने से रोकता है?

public partial class Foo : IFoo 
{ 
} 

के बाद से Bar संपत्ति पहले से मौजूद है, यह इसके reimplement करने की जरूरत नहीं होते।

या एक नया वर्ग में

public class FooExtended : Foo, IFoo 
{ 
} 

फिर से, आप Bar को लागू करने के बाद से फू यह पहले से ही लागू करता है की जरूरत नहीं होगी।

+0

मैंने कोशिश की, लेकिन यह संकलित नहीं है ... – Ropstah

+1

आंशिक वर्ग के साथ विकल्प सीमा है। आपको फ़ाइल को एक ही असेंबली में रखना होगा। विस्तारित वर्ग के साथ विकल्प सार्वभौमिक काम करना चाहिए। संकलन त्रुटि क्या है? –

+0

आप वर्चुअल वर्चुअल होने तक वैसे भी बार को फिर से कार्यान्वित नहीं कर सकते हैं, इसलिए यह करने का यह सही तरीका है। – Alex

1

आप फू के लिए आंशिक कक्षा बना सकते हैं जो IFoo लागू करता है लेकिन बार संपत्ति के साथ सार्वजनिक नहीं होने पर यह काम नहीं करेगा।

तो बार संपत्ति सार्वजनिक किया गया था:

partial class Foo 
{ 
    public string Bar { get; set; } 
} 

interface IFoo 
{ 
    string Bar { get; set; } 
} 

partial class Foo : IFoo 
{ 

} 
+0

कृपया मेरे @ टॉमिस्लाव मार्कोवस्की देखें, 'बार' सार्वजनिक होना चाहिए – Ropstah

1

Bar के रूप में निजी है, यहाँ आप जो खोज रहे हैं:

public partial class Foo : IFoo 
{ 
    string IFoo.Bar 
    { 
     get 
     { 
      return this.Bar; // Returns the private value of your existing Bar private field 
     } 
     set 
     { 
      this.Bar = value; 
     } 
    } 
} 

वैसे भी, यह भ्रामक है और यदि संभव हो तो बचा जाना चाहिए।

संपादित: ठीक है, आप अपने प्रश्न बदल दिया है, तो के रूप में Bar अब सार्वजनिक है, वहाँ कोई और अधिक समस्या के रूप में Bar हमेशा Foo में कार्यान्वित किया जाता है।

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