宣言されたメソッドはvoid
何も返さないことはわかっています。
しかし、C# では、 はvoid
単なるキーワードではなく、実際の型であるようです。は のエイリアスであり、は の
void
エイリアスです。System.Void
int
System.Int32
なぜそのタイプを使用できないのですか? 意味をなさないかもしれませんが、これは論理に関するいくつかの考えにすぎません。
どちらでもない
var nothing = new System.Void();
void
(エイリアスではないですか?)を使用する必要があると書かれています)
または
var nothing = new void();
コンパイルします。
次のようなものも使用できません:
void GiveMeNothing() { }
void GiveMeNothingAgain()
{
return GiveMeNothing();
}
それで、 のポイントは何でしょうかSystem.Void
?
ベストアンサー1
からドキュメンテーション:
構造
Void
体は名前空間で使用されますSystem.Reflection
が、一般的なアプリケーションではほとんど役に立ちません。Void
構造体には、すべての型がクラスから継承するメンバー以外のメンバーはありませんObject
。
コード内でそれを使用する理由は実際にはありません。
また:
var nothing = new void();
これはコンパイルできません。「動作する」というのはどういう意味ですか?
アップデート:
メソッドはvoid Foo()
何も返しません。System.Void
は、(Reflection を通じて)「そのメソッドの戻り値の型は何ですか?」と質問した場合に、答えが得られるようにするためにありますtypeof(System.Void)
。 代わりに を返せない技術的な理由はありませんnull
が、そうすると Reflection API に特殊なケースが導入されることになるため、可能な場合は特殊なケースは避ける必要があります。
最後に、プログラムに式 を含めることは違法ですtypeof(System.Void)
。しかし、それはコンパイラ強制これは CLR の制限ではなく、制限です。実際に、許可されたものを試してtypeof(void)
デバッガーでその値を確認すると、合法である場合と同じ値であることがわかりますtypeof(System.Void)
。