私はなぜこれが仮想ではないのSystem.ObjectなぜMemberwiseClone()は仮想ではありませんか? System.Object?
[SecuritySafeCritical]
protected object MemberwiseClone();
でこれを見つけましたか?私がmyclassをオブジェクトに入れ、MemberwiseCloneを呼び出すと、これは壊れませんか?その場合、MemberwiseCloneの実装についてはわかりませんが、それはobject.MemberwiseClone()と呼ばれませんでしたか? (私はそれが反射で不正行為することができると思うが、バーチャルは必要なものを正確に行うだろう)。私はなぜこれが仮想ではないのか分からないのですか?また、Equals、ToStringなどは(public)virtualであることに注意してください。
私はまだ少し混乱しています。 'void myfunc(Object o){o.MemberwiseClone();がある場合。 } 'その後、somoneは自分のDLLを取得し、独自のクラスを作成し、それを渡します。どのようにCLRはMemberwiseCloneのアドレスを知っていますか?仮想としてマークされていない場合でも、その機能のvtableスロットを追加しますか?スロットがなく、反射を使用しています。それはまだ面白いようです。良い答えですが、実装の考えは奇妙なようです –
@ acidzombie24いいえ、ただ1つのMemberwiseCloneがあります。 CLRは、メモリ内の各オブジェクトの種類を知っています。つまり、System.Object.GetType()がどのように動作するかです。内部的には、各.NETオブジェクトに、オブジェクトがどのタイプであるかを知るために使用できる「メソッドテーブル」へのポインタがあります。 –
"メソッドテーブル"へのポインタを使用すると、反射のように聞こえる。それは論理的に聞こえるよ。しかし、なぜ私はなぜMemberwiseCloneが保護されていて、公開されていないのだろうか。その質問に自由にお答えください。 SO –