2009-04-17 13 views
13

सी # कंपाइलर स्पष्ट रूप से सभी इंटरफेस को नोट करता है, और इसके मूल वर्ग लागू होते हैं। सीएलआई चश्मा कहते हैं कि यह necesary नहीं है। मैंने देखा है कि कुछ अन्य कंपाइलर्स इसे स्पष्ट रूप से उत्सर्जित नहीं करते हैं, और ऐसा लगता है कि यह ठीक काम करता है। क्या सी # ऐसा कोई अंतर या कारण है?सी # कंपाइलर स्पष्ट रूप से सभी इंटरफेस को एक प्रकार के उपकरण घोषित क्यों करता है?

तल पर सी # बी के लिए उत्पन्न करता है MSIL है जो:

.class private auto ansi beforefieldinit B 
     extends A 
     implements IAdvanced, 
        ISimple 

यह क्योंकि एक यह लागू करता IAdvanced करता है, ISimple निर्दिष्ट करने की आवश्यकता नहीं होनी चाहिए। सी # कोड:

interface ISimple { 
    int Basic { get; } 
    int Zero { get; } 
} 
interface IAdvanced : ISimple { 
    string Major { get; } 
} 
class A : ISimple { 
    int ISimple.Basic { 
     get { return 1; } 
    } 
    int ISimple.Zero { 
     get{ return 0;} 
    } 
} 
class B : A, IAdvanced { 
    string IAdvanced.Major { 
     get { return "B"; } 
    } 
} 

उत्तर

7

मुझे नहीं लगता कि जब तक हम संकलक डेवलपर्स में गिरावट है कि हम यहाँ किसी भी निश्चित जवाब पता कर सकते हैं, हालांकि, हम कारणों के बारे में अनुमान लगा सकते हैं।। यह हो सकता है:

  1. अनुकूलन के लिए - शायद यह जेआईटी कंपाइलर के लिए कुछ काम बचाता है।
  2. पठनीयता के लिए - मानव आंखों के लिए एमएसआईएल आउटपुट को देखते समय एक प्रकार के उपकरण को समझना आसान बनाता है।
  3. क्योंकि ग्रीष्मकालीन इंटर्न ने इसे कार्यान्वित किया है और चूंकि यह ठीक काम करता है, कोई भी इसे तोड़ने के मामले में इसे बदलने वाला नहीं है।
+0

आईआईआरसी, सबकुछ स्पष्ट रूप से विशिष्टता में परिभाषित किया गया है। तो यहां कोई अनुमान नहीं है। – leppie

+0

मैं दरवाजा नंबर तीन के लिए जाना होगा! ;-) – peSHIr

+0

हाँ, सीएलआई चश्मा के विभाजन द्वितीय ने यह स्पष्ट किया है कि इसकी आवश्यकता नहीं है। मैंने नहीं देखा कि क्या यह कहा गया है कि यह वास्तव में कुछ भी करता है। – MichaelGG

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