2013-06-29 23 views
0

簡單的問題。爲什麼不是表達式typeof(this)無效的C#?或者表達式sizeof(this),以及?當我嘗試運行一個簡短的測試程序時,它說類型預期,然後引發一堆其他語法錯誤。我的意思是,typeof是一個方法(或者你傳遞一個參數的關鍵字,不確定),它與sizeof相同,那麼爲什麼不是this是一個有效的參數呢?我的意思是,你可以用this(例如MyMethod(this))調用很多方法,那麼typeofsizeof是什麼特殊?爲什麼不是typeof(this)或sizeof(this)有效?

當編寫一個代碼片段如DependencyProperty這將是非常有用的。例如,查看propa片段。它必須在那裏使用typeof(ownerclass)。如果它可能是typeof(this),那將會好很多。


測試程序:

using System; 
public struct TestingClass 
{ 
    public static void Main() 
    { 
     TestingClass tc = new TestingClass(); 
     tc.Test(); 
     Console.ReadKey(true); 
    } 
    public void Test() 
    { 
     Console.WriteLine(typeof(this)); //error here 
     Console.WriteLine(sizeof(this)); //and here too 
    } 
} 
+0

你真的是92個 – user2029077

+0

@MinimusHeximus號 –

回答

10

我的意思是,typeof運算是一種方法(或關鍵字,你傳遞一個參數,不知道)

這是一個運營商,而不是一種方法。他們非常不同。畢竟,你不能在其他地方使用類型爲的名稱作爲方法參數,對嗎?

typeofsizeof都是具有單一操作數的一元運算符,它必須是一個類型(或類型參數)名稱。 this不是類型名稱,因此是錯誤。

我建議你閱讀這兩個操作符的C#5規範 - 在7.6.11中描述了typeof操作符,在第18.5.8節中描述了sizeof操作符。

如果你想知道一個對象的執行時類型,通話Object.GetType(),這確實方法:

Type foo = this.GetType(); 

或者離開this隱:

Type foo = GetType(); 

不是與編譯時類型this相同,這是編碼出現的類型。

+2

+1此外,'sizeof'可能只適用於值類型 –

+0

@EdS .:是的 - 我認爲我會避免進一步的複雜化。 –

+0

我在兩次計數都弄錯了。謝謝。 –

1

的關鍵字「this」指的是類的當前實例,typeof運算需要一個類型不是實例(的「該」實例的類型)

Type t = this.GetType(); 

CIL加載「隱藏」參數「這「,它在方法實現中引用當前類型,併爲」this「對象調用默認基類ctor(這發生在非靜態成員上)。

的sizeof可以適用於值類型和非託管類型,如指針 請參閱MSDN鏈接 - http://msdn.microsoft.com/en-us/library/eahchzkf(v=vs.100).aspx

相關問題