ぽざうねっと

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  420  : 記事  0  : コメント  9718  : トラックバック  76

ニュース

さて、今年は何を漬けようか

書庫

日記カテゴリ

Accessory

Community

Private

2008年4月25日 #

http://csharper.blog57.fc2.com/blog-entry-211.html

ほぉ~不完全な(初期化されていない)状態とはいえ System.Void のインスタンスが作れるんだ。
というわけで試してみましたよっと
実行してみると Activator と Assembly 使ったものは「System.Void のインスタンスを動的に作成できません」とでるが FormatterServices を使うとちゃんと System.Void が出力されますね。
じつは、.NET Framework 1.1 までは上記のどれでも System.Void のインスタンスは作成できてました。
さらに FormatterServices.GetUninitializedObject を使った場合、抽象クラスのインスタンスやインターフェースのインスタンスも作成できたりしました。
具象クラスや実装クラスのインスタンスではなく、抽象クラスやインターフェースのインスタンスです。
実体何だよ?って思いますが作れるものは作れるんです。
2.0 以降では抽象クラスのインスタンスは作成できませんと怒られます。

まあ、インスタンスは作れますが C# では Void と宣言することが不可能なため、少し前に中さんが書いてたようなジェネリクスなどに利用することは無理ですけど。
コンストラクタを実行しないってことは何らかのマーキングのようなものだけ行っているんでしょうか?

気がつけば 300 エントリ目、よくがんばった、俺
posted @ 23:17 | Feedback (8)