हम एक इस तरह सामान्य प्रकार पैरामीटर पर बाधा "से व्युत्पन्न" निर्दिष्ट कर सकते हैं:क्या "जहां से नहीं लिया गया" के लिए एक सामान्य प्रकार-बाधा है?
class Bar<T> where T : IFooGenerator
वहाँ नहीं से प्राप्त निर्दिष्ट करने के लिए कोई तरीका है?
मेरे यूज-केस: मैं FooGenerator
कि में चलाने योग्य हैं, प्रत्येक के लिए एक ही साथ में चलाना कोड के साथ का एक समूह है, लेकिन हम नहीं करते उन्हें हमेशा करना चाहते parallelized किया।
public class FooGenerator : IFooGenerator
{
public Foo GenerateFoo() { ... }
}
इस प्रकार, मैं समानांतर में फू पैदा करने के लिए एक सामान्य कंटेनर वर्ग बनाने के लिए:
public class ParallelFooGenerator<T> : IFooGenerator where T : IFooGenerator
{
public Foo GenerateFoo()
{
//Call T.GenerateFoo() a bunch in parallel
}
}
जब से मैं FooGenerator
और ParallelFooGenerator<FooGenerator>
चाहते विनिमेय हो सकता है, मैं ParallelFooGenerator : IFooGenerator
बनाते हैं। हालांकि, मैं स्पष्ट रूप से ParallelFooGenerator<ParallelFooGenerator>
कानूनी नहीं होना चाहता हूं।
तो, एक सहायक प्रश्न के रूप में, क्या यह संभवतः डिजाइन करने का एक बेहतर तरीका है यदि "बाधाओं से प्राप्त नहीं" असंभव हैं?
'ParallelFooGenerator' पहले से ही संभव नहीं है, क्योंकि 'ParallelFooGenerator' एक सामान्य प्रकार है और आप एक सामान्य तर्क निर्दिष्ट नहीं किया है। उदाहरण के लिए, 'समानांतर फ़ू जेनरेटर <समानांतर फ़ू जेनरेटर >' संभव है - और इस तरह के एक प्रकार को वास्तव में बुरा होने की इजाजत देगी? –
cdhowie
नहीं, यह संभव नहीं है - अनुमत बाधाएं: http://msdn.microsoft.com/en-us/library/d5x73970.aspx – Slugart
@cdhowie: वाह, डरप, आप सही हैं। खैर, यह मेरी समस्या हल करता है :) लेकिन सवाल अभी भी दूसरों के लिए उपयोगी हो सकता है! –