簡體   English   中英

在C#中,為什么使用動態類型允許我在泛型上使用運算符?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM