जवाबों:
सीधे शब्दों में कहें तो यह जेनेरिक पैरामीटर को एक वर्ग (या अधिक विशेष रूप से एक संदर्भ प्रकार जो एक वर्ग, इंटरफ़ेस, प्रतिनिधि या सरणी प्रकार हो सकता है) के लिए बाध्य कर रहा है।
अधिक विवरण के लिए इस MSDN लेख को देखें।
यह एक सामान्य प्रकार की बाधा है । इस मामले में इसका मतलब है कि सामान्य प्रकार Tका एक संदर्भ प्रकार (वर्ग, इंटरफ़ेस, प्रतिनिधि, या सरणी प्रकार) होना चाहिए।
यह एक प्रकार की बाधा है T, यह निर्दिष्ट करता है कि यह एक वर्ग होना चाहिए।
whereखंड अन्य प्रकार की कमी, जैसे निर्दिष्ट करने के लिए इस्तेमाल किया जा सकता:
where T : struct // T must be a struct
where T : new() // T must have a default parameterless constructor
where T : IComparable // T must implement the IComparable interface
अधिक जानकारी के लिए, whereखंड , या सामान्य पैरामीटर की कमी पर MSDN के पृष्ठ देखें ।
where T : class, IComparable, new()
यह संदर्भ प्रकारों केT लिए प्रतिबंधित है । आप वहाँ मूल्य प्रकार ( और आदिम प्रकार को छोड़कर ) नहीं रख पाएंगे ।structstring
इसका मतलब यह है कि Tजेनेरिक विधि का उपयोग करते समय उपयोग किया जाने वाला प्रकार एक वर्ग होना चाहिए - अर्थात यह एक संरचना नहीं हो सकती है या जैसी संख्या में निर्मित हो सकती है intयाdouble
// Valid:
var myStringList = DoThis<string>();
// Invalid - compile error
var myIntList = DoThis<int>();
where T: class शाब्दिक अर्थ है कि T has to be a class। यह किसी भी प्रकार का संदर्भ हो सकता है। अब जब भी कोई कोड आपकी DoThis<T>()विधि को कॉल करता है तो उसे T को बदलने के लिए एक वर्ग प्रदान करना होगा । उदाहरण के लिए अगर मुझे आपकी DoThis<T>()विधि को कॉल करना था तो मुझे इसे निम्न तरह से कॉल करना होगा:
DoThis<MyClass>();
यदि आपका मैथोड निम्नलिखित की तरह है:
public IList<T> DoThis<T>() where T : class
{
T variablename = new T();
// other uses of T as a type
}
फिर जहां कभी T आपकी विधि में दिखाई देता है, उसे MyClass द्वारा प्रतिस्थापित किया जाएगा। तो अंतिम विधि जिसे कंपाइलर कॉल करता है, वह निम्न की तरह दिखेगा:
public IList<MyClass> DoThis<MyClass>()
{
MyClass variablename= new MyClass();
//other uses of MyClass as a type
// all occurences of T will similarly be replace by MyClass
}
new T()साथ संभव नहीं है where T : class। आपको इसे करने where T: new()की अनुमति देने के लिए निर्दिष्ट करना होगा।
इसे एक प्रकार का पैरामीटर बाधा कहा जाता है। प्रभावी रूप से यह विवश करता है कि टी किस प्रकार का हो सकता है।
प्रकार तर्क एक संदर्भ प्रकार होना चाहिए; यह किसी भी वर्ग, इंटरफ़ेस, प्रतिनिधि या सरणी प्रकार पर भी लागू होता है।
यहाँ T एक Class.It को संदर्भित करता है। यह एक संदर्भ प्रकार हो सकता है।
'T' एक सामान्य प्रकार का प्रतिनिधित्व करता है। इसका अर्थ है कि यह किसी भी प्रकार के वर्ग को स्वीकार कर सकता है। निम्नलिखित लेख मदद कर सकता है:
http://www.15seconds.com/issue/031024.htm