2011-03-31 14 views
11

द्वारा कार्यान्वित किया गया है क्या मैं एक सारणी कक्षा छोड़ सकता हूं जो इंटरफ़ेस को खाली करता है और यह दर्शाता है कि इंटरफ़ेस में सभी विधियां/गुण मेरी कक्षा के भीतर सार हैं। ऐसा प्रतीत होता है कि मुझे उन्हें अमूर्त वर्ग में फिर से लिखना है, लेकिन मैं वास्तव में इस नकल से बचना चाहता हूं।सी # इंटरफेस खाली अमूर्त वर्ग

मेरा कारण यह है कि मेरे पास अलग-अलग एक्सेसर्स, एक सार्वजनिक और एक आंतरिक के साथ दो इंटरफेस हैं, जिन्हें मैं एक साथ लाना चाहता हूं, इसलिए मेरे पास एक अमूर्त वर्ग है जो उन्हें बढ़ाया जा सकता है।

public interface ISomePublicProperties { 
    int PropertyOne {get;} 
} 

internal interface ISomeInternalProperties { 
    int PropertyTwo {get;} 
} 

public abstract class SomeClass : ISomePublicProperties, ISomeInternalProperties {} 

लेकिन संकलक शिकायत है कि SomeClass इंटरफ़ेस विधि ISomePublicProperties.PropertyOne और ISomeInternalProperties.PropertyTwo

को लागू नहीं करता है (मैं जानता हूँ कि जावा इस अनुमति देता है) सी # में वैसे भी वहाँ है कि मैं सार वर्ग खाली लागू करने छोड़ सकते हैं इंटरफेस?

+0

क्या आपने संकलक को बंद करने के लिए केवल 'आभासी' स्टब विधि बनाने का प्रयास किया है? – FreeAsInBeer

उत्तर

15

नहीं। सी # में अमूर्त वर्ग को इंटरफ़ेस को पूरी तरह कार्यान्वित करना होगा। ध्यान दें कि इसे अमूर्त विधियों और सार गुणों के साथ कार्यान्वित कर सकता है। सी # के बारे में यह एक छोटी सी चीज है जिसने मुझे हमेशा खराब किया है।

+0

जबकि आप अमूर्त गुणों के साथ कार्यान्वित कर सकते हैं, ऐसा लगता है कि आप * स्पष्ट रूप से * अमूर्त गुणों के साथ कार्यान्वित नहीं कर सकते हैं। निम्नलिखित शिकायतें कि अमूर्त सदस्य निजी नहीं हो सकते - "अमूर्त int ISomePublicProperties.PropertyOne {get;}"। दुर्भाग्य। – yoyo

3

ऐसा करने का एकमात्र तरीका virtual गुणों के साथ कोई कार्यान्वयन नहीं है। ये तब आपके व्युत्पन्न वर्गों में ओवरराइड किए जाते हैं।

public abstract class SomeClass : ISomePublicProperties, ISomeInternalProperties 
{ 
    public abstract int PropertyOne { get; } 
    internal abstract int PropertyTwo { get; } 
} 
+0

मुझे लगता है कि वह 'सार्वजनिक अमूर्त int संपत्ति {कुछ प्राप्त करने से बचना चाहता है; } ' – aqwert

+0

आप बिल्कुल सही हैं। मैंने अपना जवाब तय कर लिया है। –

+0

प्रतिक्रियाओं के लिए धन्यवाद लेकिन मैं वास्तव में अमूर्त वर्ग में इंटरफेस के दोहराव से बचना चाहता था - मैं चाहता था कि अमूर्त वर्ग खाली हो और कक्षा के विस्तारक इंटरफेस को लागू करने के लिए। – kevin

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