मान लें कि मेरे पास एक वर्ग (ClassA
) है जिसमें एक विधि है जो किसी अन्य वर्ग के निर्माता को कॉल करती है, जैसे:अप्रयुक्त रचनाकारों में मुझे संदर्भों को संदर्भित करने के लिए क्यों मजबूर किया गया है?
public class ClassA
{
public void CallClassBConstructor()
{
using(ClassB myB = new ClassB()) {...}
}
}
कक्षा ClassB
इस तरह दिखता है:
public class ClassB : IDisposable
{
public ClassB(){}
public ClassB(string myString){}
public ClassB(ClassC myC){}
public void Dispose() {...}
}
... और ClassC
और भी सरल है:
public class ClassC{}
अगर मैं इन वर्गों को अपनी असेंबली में डालता हूं और पूरे समाधान को संकलित करता हूं तो मुझे कोई त्रुटि नहीं मिलती है। लेकिन अगर मैं इसके साथ उपयोग कथन को प्रतिस्थापित करता हूं:
using(ClassB myB = new ClassB("mystring")){...}
मुझे ClassA
में [mynamespace].ClassC
का संदर्भ जोड़ने के लिए एक संकलन त्रुटि मिलती है। चूंकि मैं ClassB(ClassC myC)
को कॉल नहीं कर रहा हूं, इस पर मुझे कोई समझ नहीं आता - मुझे अन्य रचनाकारों के प्रकारों को शामिल क्यों करना है चाहे मैं उनका उपयोग करता हूं या नहीं? क्या होगा यदि ClassC
को लाइसेंस प्राप्त या हार्ड-टू-एक्वायर असेंबली में शामिल किया गया हो? क्या यह खराब डिजाइन का एक उदाहरण है कि डेवलपर्स से बचना चाहिए या क्या मुझे यहां कुछ याद आ रहा है?
यह पहली जगह संकलित नहीं हो सकता है, क्लासबी IDISposable लागू नहीं करता है। फिर इसका उपयोग किसी खंड में नहीं किया जा सकता है। –
यह सी/सी ++ नहीं है जहां खंडकर्ता द्वारा अनुभागों को gc'd किया गया है, जहां अमान्य अप्रयुक्त कोड चुपचाप अनदेखा किया जाएगा। – leppie
मैंने कोड संपादित किया ताकि इसे संकलित करना चाहिए –