मेरे पास एक समान विधि के साथ एक संग्रह वर्ग है जिसे मैं प्रत्येक आइटम के बीच समानता जांच करने के लिए एक विधि में पास करना चाहता हूं।क्या मैं सी # जेनेरिक बाधाओं में 'सुपरटेप' संबंध निर्दिष्ट कर सकता हूं?
public delegate bool EqualityComparer<T>(T x, T y);
public class Collection<T>
{
//...
public bool Equals<U>(Collection<T> other, EqualityComparer<U> eq) where T : U
{
// code using eq delegate to test equality between
// members of this and other collection
}
}
दुर्भाग्य से, संकलक इस पर borks ('Collection.Equals()' प्रकार पैरामीटर 'को परिभाषित नहीं करता टी: इसके अलावा, मैं प्रतिनिधि प्रकार टी खुद के रूप में टी की सुपर-क्लास पर संचालित करने के लिए और साथ ही अनुमति देना चाहते हैं ')। क्या इस प्रकार की बाधा/संचालन को निर्दिष्ट करने का कोई तरीका है?
क्या यह संभव होने के लिए समझ में आता है? अनुमान से इसे संभव नहीं बनाना मुश्किल होगा क्योंकि दो घोषणाओं को पूरे प्रोजेक्ट में फैलाया जा सकता है, या यहां तक कि निर्दिष्ट नहीं किया जा सकता है – Dykam
हां, यह सही समझ में आता है - आप निर्दिष्ट कर सकते हैं कि एक प्रकार पैरामीटर * subclass * होना चाहिए कुछ और, तो दूसरी तरफ क्यों नहीं? (जावा इसे 'टी सुपर फू' का उपयोग करके 'टी सुपर फू' का उपयोग करता है, बीटीडब्ल्यू, बीटीडब्ल्यू।) –
आह - मुझे लगता है कि आप एक राइडर के रूप में जो लिख रहे थे उसे रखने के लिए आप अपना जवाब संपादित कर रहे थे :) – ShuggyCoUk