यदि मेरा उत्तर ऑफ-किटर लगता है तो कृपया अधिक स्पष्टीकरण प्रदान करने के लिए स्वतंत्र महसूस करें।
कम से कम सी # भाषा में ऑपरेटरों पर कोई सामान्य बाधा नहीं है। जैसा कि जॉन स्कीट Unconstrained Melody के साथ साबित हुआ है, बाधाएं वास्तव में सीएलआर में पूरी तरह वैध हो सकती हैं।
बाधाओं के साथ आप सबसे अच्छा कर सकते हैं इंटरफेस/कस्टम कक्षाएं जो आपको आवश्यक कार्यों का पर्दाफाश करती हैं। आप आदिम प्रदान नहीं कर पाएंगे (जब तक कि आप शायद implicit
ऑपरेटर को भी लागू नहीं करते), लेकिन कम से कम आप गणित के हिस्से के लिए जेनेरिक कोड बना सकते हैं।
जेनेरिक बाधाएं संकलक को सबसे कम आम denominator (जैसा कि बाधा या कमी के द्वारा निर्दिष्ट) के आधार पर उपलब्ध सदस्यों को अनुमान लगाने की अनुमति देता है। अधिकांश समय, जेनेरिक अनियंत्रित होते हैं और इस प्रकार आपको केवल object
अर्थशास्त्र प्रदान करते हैं।
वैकल्पिक रूप से, बाधाओं के उपयोग से बचें और
dynamic
का उपयोग अस्थायी रूप से सामान्य चर की दुकान और फिर इस धारणा बनाना (बतख टाइपिंग के माध्यम से) के लिए यह प्रासंगिक ऑपरेटरों है:
class Program
{
static void Main(string[] args)
{
var result = Add<int, long, float>(1, 2);
Console.WriteLine(result); // 3
Console.WriteLine(result.GetType().FullName); // System.Single
Console.Read();
}
static T3 Add<T1, T2, T3>(T1 left, T2 right)
{
dynamic d1 = left;
dynamic d2 = right;
return (T3)(d1 + d2);
}
}
यह डीएलआर शामिल है और होगा कुछ प्रदर्शन ओवरहेड (मेरे पास सटीक आंकड़े नहीं हैं), खासकर यदि आप प्रदर्शन-महत्वपूर्ण होने की गणना करना चाहते हैं।
class Tuple<T1, T2> // etc.
var myTuple = new Tuple<int, int>(1, 2);
स्रोत
2012-06-08 15:07:09
दुर्भाग्य से, प्रकार बाधा आप की आवश्यकता करने के लिए उस प्रकार arithmethic ऑपरेटरों का समर्थन करता है की अनुमति नहीं है। मुझे दिलचस्प लगता है कि बीसीएल स्रोत कोड में उदा। 'Int32' आपको विरासत सूची में 'IArithmetic' इंटरफ़ेस मिलेगा जिस पर टिप्पणी की गई है। यह मेरे हिस्से पर शुद्ध अटकलें है, लेकिन यदि माइक्रोसॉफ्ट ने बीसीएल में उस इंटरफ़ेस को सक्षम किया है तो आप शायद अंकगणितीय के साथ अपनी जेनेरिक कक्षाएं लिखने की अनुमति देने के लिए 'IArithmetic ' को बाध्यता के रूप में निर्दिष्ट कर सकते हैं। –
इसी तरह के प्रश्न से लिंक करें: http://stackoverflow.com/q/4039694/613130 – xanatos