[英]In C#, why does using dynamic type allow me to use operators on generics?
在課堂上,我們正在處理泛型,並被要求完成一項任務。
我們創建了一個Account<T>
類,其中一個屬性為private T _balance;
然后不得不寫信貸和借記_balance
。
通過例如acc1.Credit(4.6);
從Main調用的Credit method
(partial 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
類型。 在我的新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(object input)
將其作為類型T
返回。 為什么使用動態類型允許我在泛型上使用運算符?
使用dynamic
類型時,分辨率將延遲到運行時。 如果在運行時,泛型類型支持+
運算符,則代碼將起作用。 如果沒有,它將拋出異常。
來自MSDN關於dynamic
文章:
在編譯時,假定鍵入為動態的元素支持任何操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.