सामान्य प्रकार क्यों नहीं खोल सकते पैरामीटर के रूप में पारित किया जा सकता है। मेरे पास अक्सर कक्षाएं होती हैं:सी # सामान्य प्रकार क्यों नहीं खोल सकते पैरामीटर के रूप में पारित किया जा सकता है?
public class Example<T> where T: BaseClass
{
public int a {get; set;}
public List<T> mylist {get; set;}
}
आइए बेसक्लस निम्नानुसार है; सिर्फ एक पैरामीटर के रूप में यह एक वर्ग पारित करने के लिए
public int MyArbitarySumMethod(Example example)//This won't compile Example not closed
{
int sum = 0;
foreach(BaseClass i in example.myList)//myList being infered as an IEnumerable
sum += i.num;
sum = sum * example.a;
return sum;
}
मैं तो एक इंटरफेस लिखने के लिए है इस प्रकार है::
public BaseClass
{
public int num;
}
मैं तो कहते हैं की एक विधि चाहते
public interface IExample
{
public int a {get; set;}
public IEnumerable<BaseClass> myIEnum {get;}
}
सामान्य कक्षा को तब संशोधित किया जाना चाहिए:
public class Example<T>: IExample where T: BaseClass
{
public int a {get; set;}
public List<T> mylist {get; set;}
public IEnumerable<BaseClass> myIEnum {get {return myList;} }
}
यह एक बहुत ही समारोह है जो मैंने सोचा था कि संकलक अनुमान लगा सकता है। यहां तक कि अगर कुछ नहीं बदला जा सकता है, तो मुझे सिंटैक्स शॉर्ट कट्स की अनुपस्थिति के कारणों/औचित्य के बारे में पता है, तो मुझे मनोवैज्ञानिक रूप से बहुत उपयोगी लगता है।
यह वास्तव में स्पष्ट नहीं है कि आप किस प्रतिबंध के बारे में बात कर रहे हैं, क्योंकि आपने यह नहीं दिखाया है कि आप इसे कैसे पारित करने का प्रयास कर रहे हैं। मुझे * संदेह है * मुझे पता है कि आपका क्या मतलब है, लेकिन सवाल स्पष्ट नहीं है ... –
जब आप "सामान्य प्रकार कैसे खोलें" पूछते हैं तो आपका क्या मतलब है? –
@Rich, यदि आप 'टी' अनिर्दिष्ट बने रहे हैं, तो आप 'उदाहरण' (सिद्धांत रूप में भी) को वाक्यबद्ध रूप से कैसे पारित करेंगे? –