C# を介して CLR にステートメントがあり、C# では、GetType は仮想であり、オーバーライドできないため、あるクラスを別のクラスに偽装することはできません。
しかし、C# では GetType の親実装を非表示にできると思います。
私は何かを逃したに違いない
ベースの GetType 実装を非表示にすると、自分のクラスを別のクラスに偽装できますが、それは正しいですか?
ここで重要なのは、GetType が仮想かどうかではなく、C# であるクラスを別のクラスに偽装できるかどうかです。
以下は、可能な重複からのNO.4の回答です。私の質問はこれに関するものです。この種の偽装は可能ですか?もしそうなら、C#でクラス型の偽装を防ぐことができるとどのように言えますか? GetType が仮想かどうかに関係なく
object.GetType() メソッドをオーバーライドできないことは事実ですが、「new」を使用して完全にオーバーロードし、別の既知の型になりすますことができます。これは興味深いことですが、「Type」オブジェクトのインスタンスをゼロから作成する方法がわかりません。そのため、以下の例は別の型のふりをしています。
public class NotAString { private string m_RealString = string.Empty; public new Type GetType() { return m_RealString.GetType(); } }
この (new NotAString()).GetType() のインスタンスを作成すると、実際に文字列の型が返されます。
share|edit|flag は 3 月 15 日 18:39 に回答しました
Dr Snooze 213 GetType を参照するほとんどすべてのオブジェクトは、オブジェクトのインスタンスを持っているか、少なくともそれらが制御または推論できるいくつかの基本型を持っています。最も派生した型のインスタンスが既にある場合は、GetType を呼び出す必要はありません。ポイントは、誰かがオブジェクトで GetType を使用している限り、それが他のカスタム定義ではなく、システムの実装であることを確信できるということです。– Servy 3 月 15 日 18:54 にコメントを追加