在课堂上,我们正在处理泛型,并被要求完成一项任务.
我们创建了一个帐户< T>具有一个属性私有T _balance的类;然后不得不写信贷和借记_balance的方法.
从Main调用的信用方法(部分)例如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;因为这会给出错误“运算符”不能应用于’T’类型的操作数”
在我阅读这个主题的过程中,我发现了动态类型.在我的新Account类中,我添加了一个新方法并将Credit方法更改为:(从Main调用例如acc1.Credit(4.6);)
public void Credit(dynamic credit) { _balance += ConvertType(credit); } public T ConvertType(object input) { return (T)Convert.ChangeType(input,typeof(T)); }
这是我不明白的. credit方法将对象作为dynamic类型,ConvertType(对象输入)将其作为类型T返回.
为什么使用动态类型允许我在泛型上使用运算符?