如何理解 C# 中的 System.Void 类型?
咨詢區
ordag
我知道方法聲明成 void 表示不返回什么東西,但我發現在 C# 中 void 不僅僅是一個關鍵詞,而且還是一個真實的類型。
void 是 System.Void 的別名,就像 int 的別名是 System.Int32 一樣,但為什么不允許直接使用Void類型呢?我覺得在邏輯上這是沒有任何問題的。
比如說:
var?nothing?=?new?System.Void();或者
var?nothing?=?new?void();或者
void?GiveMeNothing()?{?} void?GiveMeNothingAgain() {return?GiveMeNothing(); }都是無法編譯的,那請問 System.Void 到底場景在哪里呢?
回答區
Cheng Chen
void / System.Void 和 int / System.Int32 是不同的,它是一種特殊的結構體,僅用于 反射 場景中,比如下面的例子:
class?Program {public?static?void?Main(string[]?args){Type?voidType?=?typeof(Program).GetMethod("Main").ReturnType;} }在反射操作中,必須要有一種類型可以描述 Main 方法的返回值,這就是 System.Void 的應用場景。
Jon
根據 MSDN:https://docs.microsoft.com/en-us/dotnet/api/system.void?view=net-6.0 描述。
Void 結構落于 System.Reflection 命名空間,但在一般的程序開發中很少使用, Void 結構除了從 Object 上繼承來的所有類型之外,無任何東西。
所以說,你沒有任何理由需要在代碼中像下面這樣寫。
var?nothing?=?new?void();llewellyn falco
我們在代碼中用 null 來替代 void 類型,代碼如下:
public?Type?GetType(object?o) {var?type?=?o?==?null???typeof(void)?:?o.GetType(); }這樣就輕松實現了 空對象引用模型,也就省去了非常多的 空null 判斷,非常方便,接下來就可以這么寫:
GetType(o).GetProperties().Select(?.....點評區
我覺得 Cheng Chen 大佬說到點子上了,我們在反射操作中,比如要用 System.Void 來承載那些 void 類型的返回值,學習了。
總結
以上是生活随笔為你收集整理的如何理解 C# 中的 System.Void 类型?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .NET6之MiniAPI(二十四):用
- 下一篇: c# char unsigned_dll