16

私の質問は比較的単純です。メソッド GetUninitializedObject( type) は、コンストラクターを呼び出さずに特定の型の新しいインスタンスを生成せず、正しいオブジェクトのように動作する (同じ構造を持つ) 新しいオブジェクトを生成するという感覚があります。明らかに同じ型を持っています (ただし、内部的には Object のままです)。

最近、GetUninitializedObject を使用して Form.Button のクローンを作成し、その操作中に必要な型の新しいインスタンスを生成しようとしたため (ソース オブジェクトを再帰的に操作します)、結果は正しい構造 (および即時ウィンドウ) を持っていると言います。また、それは正しいタイプを持っていると言います)しかし、MyForm.Components.Add( clonedButton )を実行しようとすると、「タイプ 'System.Object'のオブジェクトをタイプ 'ControlCollection'にキャストできません」というメッセージで例外を受け取ります(ただし、私は' clonedButton タイプが Button であり、その継承も正しいことを確認しました。手動で、複製されたボタン内のほぼすべての構造をチェックし、ソース Button オブジェクトと一致し、パブリック フィールドとプライベート フィールドの両方にアクセスしました)。

これが私の質問の理由です(同じクローン作成コンテキストで、ベースオブジェクトからオブジェクトを生成し、正しい名前と構造を持つフィールドを追加すると、javascriptで同様の問題が発生したため、コンパイラは私のトリックを発見し、各インスタンスのコンストラクターと呼ばれるので、同様の状況になる可能性があると思います)、誰かが GetUninitializedObject() の背後にある魔法を説明してくれれば、大いに役立つはずです(事前に感謝します)。

4

1 に答える 1