Salvatore के जवाब पूरी तरह से सही है, तो मैं सिर्फ अवधारणा थोड़ा बेहतर वर्णन करने के लिए करना चाहता था।
आपको "सामान्य प्रकार की बाधा" की आवश्यकता है; यह निर्दिष्ट करने के लिए कि टी के रूप में उपयोग किया जाने वाला प्रकार कुछ व्यवहारों (जैसे ऑब्जेक्ट से प्राप्त वस्तु या इंटरफ़ेस से व्युत्पन्न) से अवगत होना चाहिए, इस प्रकार आगे बढ़ने के बिना उस वस्तु के साथ आपको क्या करने की अनुमति है (जिसे आम तौर पर टालना है) जेनेरिक में)।
Salvatore के जवाब पता चलता है, GTCS "कहाँ" कीवर्ड का उपयोग परिभाषित कर रहे हैं:
public abstract class BaseViewModel<T> :
NotificationObject,
INavigationAware
where T : Entity;
{
...
यह मूलतः जीटीसी कहा गया है कि किसी भी टी (हालांकि दूर से) प्राप्त करना चाहिए इकाई से। यह आपको टी का इलाज करने की अनुमति देता है जैसे कि यह एक इकाई थी (नए टीएस के तत्काल के अलावा, जिसके लिए अतिरिक्त जीटीसी की आवश्यकता होती है), इस पर ध्यान दिए बिना कि वास्तविक जेनेरिक पैरामीटर प्रकार कितना कम या कम व्युत्पन्न है। आप एंटिटी पर दिखाई देने वाली किसी भी विधि को कॉल कर सकते हैं और किसी फ़ील्ड या प्रॉपर्टी को प्राप्त/सेट कर सकते हैं।
तुम भी है कि निर्दिष्ट कर सकते हैं:
- प्रकार एक वर्ग (
where T:class
) होना चाहिए, या वैकल्पिक रूप से एक ValueType (where T:struct
) होना चाहिए। यह या तो टी को उदाहरण के लिए टी आवृत्ति की तुलना और असाइनमेंट को रोकता है या रोकता है, जो नल-कोलेसिंग ऑपरेटर ??
के उपयोग को अनुमति देता है या रोकता है।
- इस प्रकार के किसी विशेष हस्ताक्षर का निर्माता होना चाहिए (
where T:new()
, where T:new(int,float)
)। यह new
कीवर्ड का उपयोग करके टीएस की तत्कालताओं को संकलित करने के लिए अनुमति देता है, जो कि टीएस के रूप में उपयोग किए जाने वाले सभी प्रकारों के अपेक्षित हस्ताक्षर के साथ एक निर्माता होता है।