へぼろっぱぁ

脳内容量が少ないTHREE-ONEのための備忘録

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

ニュース

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

書庫

日記カテゴリ

Accessory

Community

Private

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 エントリ目、よくがんばった、俺
投稿日時 : 2008年4月25日 23:17

コメント

# re: System.Void のインスタンスを作る 2008/04/26 12:52 シャノン
こんな方法も
http://blogs.wankuma.com/shannon/archive/2007/01/18/56860.aspx

# re: System.Void のインスタンスを作る 2008/04/26 13:51 THREE-ONE
あーこれ Void 型返すんですね。
MethodInfo.Invoke が void 戻りのメソッド実行すると null 返しやがるので null だと思ってました。

Post Feedback

タイトル
名前
Url:
コメント: