मैं सिर्फ एक स्थिति मारा जहां एक विधि प्रेषण अस्पष्ट था और सोचा कि अगर किसी को भी किस आधार संकलक पर समझा सकता है (.NET 4.0.30319) क्याC# जेनेरिक अतिभारित विधि भेजने अस्पष्ट
interface IfaceA
{
}
interface IfaceB<T>
{
void Add(IfaceA a);
T Add(T t);
}
class ConcreteA : IfaceA
{
}
class abstract BaseClassB<T> : IfaceB<T>
{
public virtual T Add(T t) { ... }
public virtual void Add(IfaceA a) { ... }
}
class ConcreteB : BaseClassB<IfaceA>
{
// does not override one of the relevant methods
}
void code()
{
var concreteB = new ConcreteB();
// it will call void Add(IfaceA a)
concreteB.Add(new ConcreteA());
}
कॉल करने के लिए ओवरलोड चुनता है किसी भी मामले में, संकलक मुझे चेतावनी क्यों नहीं देता है या यह संकलित क्यों करता है? किसी भी उत्तर के लिए आपको बहुत बहुत धन्यवाद।
यदि आप कॉल से वापसी मूल्य की अपेक्षा करते हैं तो क्या होता है, यानी 'var result = concreteB.Add (new ConcreteA()); '? –
अपनी जेनेरिक विधि को एक "वापसी टी" वापस लेना है और दूसरा एक "शून्य" प्रकार है। कंपाइलर उनके बीच अंतर कर सकता है। – KroaX
संकलक शिकायत करेगा कि 'var' का उपयोग नहीं किया जा सकता है, क्योंकि वह निहित रूप से टाइप किए गए चर – Sebastian