クラスではジェネリックを扱っており、課題を完了するように求められました。C#では、なぜ動的型を使用するとジェネリックで演算子を使用できますか?
1つのプロパティprivate T _balance;
を持つAccount<T>
クラスを作成して、_balance
のクレジットとデビットするメソッドを記述しなければなりませんでした。
Credit method
(部分) acc1.Credit(4.6);
:私はチェックし調整するために持っていたし、私はこのよう_balance += (T)balanceObject;
は、件名に私の読書中にエラーに"Operator '+' cannot be applied to operand of type 'T'"
を与えることができないようにキャスト
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;
}
私はdynamic
タイプを発見しました。私の新しいAccountクラスでは、私は新しいメソッドを追加してにCredit
方法を変更:これは私が理解していないものである(例えばacc1.Credit(4.6);
によりメインから呼び出さ)
public void Credit(dynamic credit)
{
_balance += ConvertType(credit);
}
public T ConvertType(object input)
{
return (T)Convert.ChangeType(input, typeof(T));
}
。与信方式では、対象がタイプdynamic
、ConvertType(object input)
がタイプT
として返されます。 なぜ動的型を使用すると、ジェネリックで演算子を使用できますか?
まだ実行しましたか? 'dynamic'キーワードは、あなたが実際にプログラムを実行するまで、コンパイラが通常行うタイプチェックを遅らせる(遅延させます)。 –
乾杯。プログラムは正常に動作します。私の混乱に加えて、私のジェネリックで数値文字列を投げることを可能にするメソッドConvertTypeが追加されました。 'acc1.Credit(" 100 ");'だから私は 'ジェネリック 'についていくつかの奇妙なアイデアを持ち始めていた。私が '遅延 'を読むとすぐに、ユーレカ! –