當我們做一些像double.IsNaN
- 究竟發生了什麼?double.IsNaN - 編譯器在這裏做什麼
如果double
是一個類,我會理解它,但double是一個結構,它是一個值類型,所以C#如何實際上調用一個值類型的靜態方法?
當我們做一些像double.IsNaN
- 究竟發生了什麼?double.IsNaN - 編譯器在這裏做什麼
如果double
是一個類,我會理解它,但double是一個結構,它是一個值類型,所以C#如何實際上調用一個值類型的靜態方法?
結構可以有方法。
...
只是櫃面需要一個例子:
struct Foo {
public void Hey()
{
Console.WriteLine("hey");
}
public static void DoSomething()
{
Console.Read();
}
}
更具體。結構也可以有STATIC方法。它調用這個靜態方法 - 它檢查雙結構中的位是否與指示NAN的位相同。 – TomTom 2010-03-18 09:45:13
NAN =不是一個數字。
它是內置於浮點/雙重標準並在處理器中實現的東西。詳見http://steve.hollasch.net/cgindex/coding/ieeefloat.html。
從這裏:http://social.msdn.microsoft.com/forums/en-US/clr/thread/16ffdb1f-119c-407e-b9f7-b9c79fec0e94/
其實當你調用一個結構的靜態 方法,調用之前以下 步驟發生:1, CLR初始化運行時類型信息結構稱爲 CORINFO_CLASS_STRUCT包含幾個 類型的關鍵部分,包括 的靜態方法指針。
2.您調用靜態方法將被路由到方法 由JIT編譯的儀器(如果 您的聲明不是nGENed)。
在這個過程中,沒有涉及構造函數 。
所有數據類型都繼承自Object
基本類型,因此任何數據類型都具有類似於對象的行爲,因爲它可以具有方法和屬性。
像Double
這樣的結構不會直接從Object
繼承,而是從ValueType
繼承,這會使編譯器將數據類型視爲簡單值。這改變了數據的存儲方式,並且在一定程度上限制了對象的功能。一個結構可以例如不具有虛擬方法,因爲數據沒有像對象那樣用指向虛擬方法表的指針進行修飾。儘管如此,結構仍然可以具有常規的方法和屬性。
問題是什麼?結構和類都可以有靜態方法 – 2010-03-18 09:45:05