6

クラスではジェネリックを扱っており、課題を完了するように求められました。

Account<T>1つのプロパティを持つクラスを作成し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タイプを発見しました。新しいAccountクラスで、新しいメソッドを追加し、Creditメソッドを次のように変更しました:(Mainからegによって呼び出されます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。動的型を使用すると、ジェネリックスで演算子を使用できるのはなぜですか?

4

1 に答える 1

6

タイプを使用する場合dynamic、解決は実行時まで延期されます。実行時にジェネリック型が+演算子をサポートしている場合、コードは機能します。そうでない場合は、例外がスローされます。

に関するMSDNの記事からdynamic

コンパイル時に、動的として入力された要素は、すべての操作をサポートすると想定されます。

于 2012-10-19T18:55:20.173 に答える