私はプロトタイプベースの言語について読んでいましたが、次の疑問が頭に浮かびました。
.NET オブジェクトの作成はニヒロ(「ゼロから」) であり、新しいオブジェクトをゼロから作成できますか? それとも、.NET オブジェクトの作成は、新しいオブジェクトを作成するための複製プロトタイプとして、既存のオブジェクト (つまりObject ) からの複製に基づいているのでしょうか?
私はプロトタイプベースの言語について読んでいましたが、次の疑問が頭に浮かびました。
.NET オブジェクトの作成はニヒロ(「ゼロから」) であり、新しいオブジェクトをゼロから作成できますか? それとも、.NET オブジェクトの作成は、新しいオブジェクトを作成するための複製プロトタイプとして、既存のオブジェクト (つまりObject ) からの複製に基づいているのでしょうか?
C#はプロトタイプベースではありません。新しいオブジェクトを作成するために既存のオブジェクトのインスタンスは必要ありません。また、javascriptのようにオブジェクトを「拡張」することもできません。
したがって、原則として、すべてのオブジェクトはnihiloで作成されます。
.Net の最も基本的なオブジェクトには、ユーザーに関するデータはなく、型と実際のデータのメモリ内の場所に関する一部の内部プラットフォームの情報のみがあります。ユーザー (開発者) の視点から見ると、それらは「存在するだけ」であり、「アイデンティティ」が異なるだけです。クラスを拡張することはできません。何かを複製しても意味がありません。
より複雑なオブジェクトは何かから派生し、最終的にはベース オブジェクトから派生します。.Net にはコピー構築もディープ コピー セマンティクスもありません。そのため、非基本オブジェクトのレベルでは、何も複製しても意味がありません。
メタデータのレベルでは、各オブジェクトは、それが属するクラスに関する情報を保持します。メタ情報は共有され、同じクラスのすべてのオブジェクトは共有されたメタ情報を指します。何かを複製してもまだ意味がありません。
したがって、オブジェクトの作成がプロトタイプの複製方法で行われたとしたら、私は非常に驚かれることでしょう。絶対的な確実性はわかりませんが、そうではないに違いありません。オブジェクトの作成は、小さなメモリ ブロックの割り当てであり、ヘッダー内にいくつかのポインターを設定するだけであると確信しています。
誰かが * ngen * いくつかのコードを作成し、それを逆アセンブルして new() 演算子がどのように機能するかを確認した場合、それは確かに検証可能です:)