पासिंग नीचे नमूना कोड में, क्यों कॉल ArrayMethod के लिए करता है एक genric प्रकार के लिए असफल जब मैं class
बाधाएक सरणी
public interface IFoo { }
public interface IBar : IFoo { }
public class Test
{
public void ClassConstraintTest<T>() where T : class, IFoo
{
T[] variable = new T[0];
ArrayMethod(variable);
}
public void GenericTest<T>() where T : IFoo
{
T[] variable = new T[0];
ArrayMethod(variable); // Compilation error: Can't convert T[] to IFoo[]
}
public void InheritanceTest()
{
IBar[] variable = new IBar[0];
ArrayMethod(variable);
}
public void ArrayMethod(IFoo[] args) { }
}
एक अच्छी प्रकार की प्रणाली में एक कॉन्वेंट प्रकार होना चाहिए जिसका उपयोग सरणी के रूप में किया जा सकता है, जिनकी वस्तुओं को सरणी के भीतर पढ़ा जा सकता है, बदला जा सकता है या कॉपी किया जा सकता है। .NET और Java में ऐरे प्रकार सुरक्षित रूप से कॉन्वेंटेट फैशन में ऐसे प्रकार के रूप में उपयोग किए जा सकते हैं, और इन्हें सुरक्षित रूप से लिखने योग्य संग्रह के रूप में गैर-कॉन्वेंटेट फैशन में सुरक्षित रूप से उपयोग किया जा सकता है। शायद अलग-अलग विज्ञापित क्षमताओं के साथ, सरणी के कई प्रकार के संदर्भ होने के लिए बेहतर होता, लेकिन आईएमएचओ जो केवल कॉन्वेंट एरे कहते हैं, वे "गलती" थे, वास्तव में विकल्पों की लागत को नहीं समझते थे। – supercat