暗黙のキャスト演算子を使用してこのクラスを指定すると、次のようになります。
public class MyDateTime
{
public static implicit operator MyDateTime(System.Int64 encoded)
{
return new MyDateTime(encoded);
}
public MyDateTime(System.Int64 encoded)
{
_encoded = encoded;
}
System.Int64 _encoded;
}
次のことができるようになりました。
long a = 5;
MyDateTime b = a;
ただし、次のことはできません。
long f = 5;
object g = f;
MyDateTime h = g;
これにより、コンパイル時間が得られます。
タイプ 'object' を 'MyDateTime' に暗黙的に変換することはできません。
私には理にかなっています。
ここで、前の例を次のように変更します。
long f = 5;
object g = f;
MyDateTime h = (MyDateTime)g;
これはうまくコンパイルされます。今、私はランタイムを取得しますInvalidCastException
:
'System.Int64' 型のオブジェクトを MyDateTime 型にキャストできません。
これは、C# の暗黙的なキャスト演算子がコンパイル時にのみ適用され、.NET ランタイムがオブジェクトを別の型に動的にキャストしようとしているときには適用されないことを示しています。
私の質問:
- 私は正しいですか?
- これを行う他の方法はありますか?
ところで、完全なアプリケーションはDelegate.DynamicInvoke()
、パラメーターを受け取る関数を呼び出すために使用しているMyDateTime
もので、渡す引数の型はDynamicInvoke
long です。