簡體   English   中英

C#中“方法”本身的類型是什么?

[英]What's the type of “Method” itself in C#?

我聽說C#是一種純粹的面向對象的編程語言,因為所有東西都是從System.Object派生的。

所以我懷疑方法本身的類型是什么。 我嘗試使用StackTraceStackFrame來獲取方法類型,但我只獲得了類的名稱,聲明了哪些方法。

當然,我試過這個:

var func = new TestClass().TestMethod; //TestMethod is a method of TestClass

但是我只得到了這個錯誤。

CS0815    Cannot assign method group to an implicitly-typed variable 

可以將方法分配給Func<..., TResult>類型變量。 我用Func和返回字符串的方法測試,然后我得到了這個:

// Result of
// Func<string> func = new TestClass().TestMethod;
// func.GetType();
Instance TestClass -> TestMethod Type : System.Func`1[System.String]

但它是Func<string> 那么,方法的真正類型名稱是什么?

編輯2018年2月10日上午01:46,KST(GMT +09:00)

好吧,讓我總結一下。 函數本身沒有類型,也不是對象, Delegate / Func<>是.NET Framework的一個功能, 它將函數作為一等公民處理( 但它不是FCC )。 這是正確的嗎?

方法沒有類型 方法就是它們 - 只是對象或類的“可調用函數”。 您可以將它們分配給具有相同簽名的DelegatesFunc這一事實只是框架的一個特性,但該方法本身沒有任何“類型”。

與類型最接近的可能是方法的返回值(如果有的話)。

方法不是對象,因此它沒有類型。

C#中的方法是將函數附加到類的面向對象的方法,但它們不是一等公民,因為函數在JavaScript中。

這就是為什么你不能為變量分配方法的原因。

你不能這樣做:

var func = Int32.Parse;

但相反,你可以做這樣的事情:

Func<string, int> func2 = Int32.Parse;

在第二個例子中,盡管看起來你實際上是在為一個變量分配方法,但實際情況是編譯器創建了一個新的Func<string, int>實例,它是一個委托(最終派生自System.Object )碰巧實際上持有對方法本身的類型安全引用。

該委托一個對象,可以作為參數分配並傳遞給其他方法,但不是方法本身而是包裝器。

所有東西都是從System.Object派生出來的,但並非一切都是一件事。

Object.GetType()解釋:

“因為System.Object是.NET Framework類型系統中所有類型的基類,所以GetType方法可用於返回表示所有.NET Framework類型的Type對象..NET Framework可識別以下五類類型:

類,派生自System.Object,

值類型,派生自System.ValueType。

接口,從.NET Framework 2.0開始,從System.Object派生。

枚舉,派生自System.Enum。

代理,派生自System.MulticastDelegate。“

實例方法不是其中之一,除了類之外沒有任何意義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM