आप पूछते हैं, "क्या मैं ISomething
के साथ इस कक्षा में T
के सभी संदर्भों को स्विच नहीं कर सकता?" तो मुझे लगता है कि आप की तुलना करने का मतलब:
public class MyClass<T> where T : ISomething
{
public T MyProperty { get; set; }
}
के साथ:
public class MyClass
{
public ISomething MyProperty { get; set; }
}
दूसरे उदाहरण में, MyProperty
केवल ISomething
का एक उदाहरण होने की गारंटी है। पहले उदाहरण में, MyProperty
जो भी T
है, भले ही यह ISomething
का एक विशिष्ट उप प्रकार है।
public class MySomething : ISomething
{
public string MyOtherProperty { get; set; }
}
अब, अगर हम पहले, सामान्य, उदाहरण का उपयोग, हम हो सकता है:: ISomething
का एक ठोस कार्यान्वयन पर विचार करें
MyClass<MySomething> myClass = new MyClass<MySomething>();
Console.WriteLine(myClass.MyProperty.MyOtherProperty);
दूसरी ओर, अगर हम दूसरे उदाहरण के लिए इस्तेमाल किया है, हम क्योंकि यह केवल एक ISomething
होने के लिए जाना जाता है MyOtherProperty
उपयोग करने में सक्षम नहीं होगा:
MyClass myClass = new MyClass();
Console.WriteLine(myClass.MyProperty.MyOtherProperty); // Won't compile, no property "MyOtherProperty"
एक अलग टिप्पणी पर, कारण इन प्रकार की कमी उपयोगी होते हैं यह है कि आप MyProperty
(T
टाइप करें) और ISomething
के सदस्यों तक पहुंच सकते हैं।
public interface ISomething
{
public string SomeProperty { get; set; }
}
तो फिर तुम MyProperty.SomeProperty
पहुंच सकता है: दूसरे शब्दों में, अगर ISomething
की तरह घोषित किया गया। यदि आपने where T : ISomething
को छोड़ दिया है तो आप SomeProperty
तक पहुंचने में सक्षम नहीं होंगे क्योंकि T
केवल object
प्रकार के रूप में जाना जाएगा।
http://msdn.microsoft.com/en-us/library/d5x73970.aspx – zebrabox