कक्षा में हम जेनेरिक से निपट रहे हैं और उन्हें एक असाइनमेंट पूरा करने के लिए कहा गया था।सी # में, गतिशील प्रकार का उपयोग करने से मुझे जेनेरिक पर ऑपरेटरों का उपयोग करने की अनुमति क्यों मिलती है?
हमने एक संपत्ति Account<T>
कक्षा बनाई है जिसमें एक संपत्ति private T _balance;
है और उसके बाद _balance
क्रेडिट और डेबिट करने के तरीकों को लिखना पड़ा।
Credit method
(आंशिक) मुख्य से उदा। acc1.Credit(4.6);
:
public void Credit(T credit)
{
Object creditObject = credit;
Object balanceObject = _balance;
Type creditType = creditObject.GetType();
Type balanceType = balanceObject.GetType();
if(creditType.Equals(balanceType))
{
if(creditType.Equals(typeof (double)))
{
balanceObject= (double)balanceObject + (double)creditObject;
}
...WITH more else if's on int,float and decimal.
}
_balance = (T)balanceObject;
}
मैं हालत के लिए जाँच की थी और डाली के रूप में मैं नहीं _balance += (T)balanceObject;
इस रूप में त्रुटि "Operator '+' cannot be applied to operand of type 'T'"
दे देंगे कर सकते हैं इस विषय पर मेरी पढ़ने के दौरान मैं dynamic
प्रकार की खोज की। मेरी नई खाता वर्ग में मैं एक नई विधि जोड़ा गया है और करने के लिए Credit
पद्धति को बदल कर: (जैसे acc1.Credit(4.6);
द्वारा मुख्य रूप से कहा जाता है)
public void Credit(dynamic credit)
{
_balance += ConvertType(credit);
}
public T ConvertType(object input)
{
return (T)Convert.ChangeType(input, typeof(T));
}
यह मैं क्या समझ में नहीं आता है। क्रेडिट विधि ऑब्जेक्ट में dynamic
टाइप करती है और ConvertType(object input)
इसे T
टाइप करता है। गतिशील प्रकार का उपयोग करने से मुझे जेनेरिक पर ऑपरेटरों का उपयोग करने की अनुमति क्यों मिलती है?
क्या आपने इसे अभी तक चलाया है? 'डायनामिक' कीवर्ड इस प्रकार की जांच में देरी (स्थगित) करेगा कि संकलक सामान्य रूप से तब तक करता है जब तक आप वास्तव में प्रोग्राम चलाते हैं। –
चीयर्स। कार्यक्रम ठीक चलाता है। मेरे भ्रम को जोड़ने के लिए विधि 'कनवर्ट टाइप' विधि थी जिसने मुझे अपने जेनरिक पर नंबर स्ट्रिंग फेंकने की इजाजत दी। 'Acc1.Credit (" 100 ");'। तो मैं 'जेनेरिक' के बारे में कुछ अजीब विचार शुरू कर रहा था। जैसे ही मैंने 'defer', यूरेका पढ़ा! –