निम्नलिखित कोड का निरीक्षण करें:क्यों structs बाहरी गुण नहीं हो सकता है, लेकिन तरीकों ठीक है?
[AttributeUsage(AttributeTargets.All)]
public class XAttribute : Attribute
{
}
public struct A
{
[X]
public static extern int XX { get; }
}
यह संकलित नहीं करता है। त्रुटि संदेश
संशोधक 'बाहरी' के लिए मान्य नहीं है
लेकिन, निम्न कोड ठीक संकलित करता है:
[AttributeUsage(AttributeTargets.All)]
public class XAttribute : Attribute
{
}
public struct A
{
[X]
public static extern int GetXX();
}
क्यों ???
संपादित करें
दोस्तों, दोस्तों। मैंने नहीं पूछा होगा कि मेरे पास इसके लिए असली आवेदन नहीं था। मैं समझता हूं कि पूरी तरह अकादमिक रुचि यह समझने के लिए कि क्यों कुछ चीजें परिभाषित की जाती हैं, वे कुछ ऐसा नहीं है जो हम में से कुछ को प्रेरित करती है, इसलिए यहां पृथ्वी की प्रेरणा है। मेरे पास PostSharp विशेषता है, जो जिम्मेदार बाहरी संपत्ति में एक निश्चित तर्क को इंजेक्ट करता है। विशेष रूप से, असली कोड ऐसा दिखता है:
[LoggerAccessProperty]
private static extern ILog Logger { get; }
जहां PostSharp LoggerAccessProperty पहलू को संसाधित करता है और वास्तविक गेटर विधि को इंजेक्ट करता है, जो निजी स्थैतिक संकलक उत्पन्न करता है जो आईएलओजी उदाहरण उत्पन्न करता है। यह Log4PostSharp पैकेज के हमारे इन-हाउस एक्सटेंशन का हिस्सा है। उस समय, हमने PostSharp Google कोड साइट पर Log4PostSharp का विस्तारित संस्करण प्रकाशित किया है और यह विशेषता मेरा हालिया जोड़ा है, फिर भी अप्रकाशित है।
EDIT2
नोट, कि निम्न कोड सिर्फ ठीक है:
[AttributeUsage(AttributeTargets.All)]
public class XAttribute : Attribute
{
}
public class A
{
[X]
public static extern int XX { get; }
}
अंतर यह है कि ए यहां एक वर्ग है, संरचना नहीं।
EDIT3
मैं .NET 4.
का उपयोग कर रहा हूँ
कक्षा ठीक से संकलित करती है, लेकिन बड़ा सवाल यह वास्तव में चलता है? –
कृपया, प्रश्न के लिए मेरा पहला संपादन पढ़ें। – mark