クラスではジェネリックを扱っており、課題を完了するように求められました。
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
。動的型を使用すると、ジェネリックスで演算子を使用できるのはなぜですか?