2011-07-02 123 views
0

我讀的書「C#語言」,並從頁面123-124打到這個例子中的優先級:C#語言問題:匹配

姓名的塊中的含義可能因上下文中該名稱被使用。

在該示例

using System; 
class A { } 
class Test 
{ 
    static void Main() 
    { 
    string A = "hello, world"; 
    string s = A; // Expression context 
    Type t = typeof(A); // Type context 
    Console.WriteLine(s); // Writes "hello, world" 
    Console.WriteLine(t); // Writes "A" 
    } 
} 

名稱A在表達式上下文中用於指局部變量A和在類型 上下文來引用類A

我罰款與A類的知名度。但是,這裏(Type t = typeof(A))類A前面字符串A。 那麼,匹配/選擇可能的「A」的「優先級」或「序列」是什麼?

回答

4

沒有衝突。 typeof只適用於類名。要獲取對象實例的類型,請使用.GetType()

+0

thx David,oops,對基本點的誤解:p – athos

1
string A = "hello, world"; 
string s = A; // Expression context 
A a=new A(); 
Type t = typeof(A); // Type context 
Console.WriteLine(s); // Writes "hello, world" 
Console.WriteLine(t); // Writes "A" 

這裏我們看到一個表達式上下文的例子:string s = A。在表達式上下文中,局部變量優先於類。

當使用類型的上下文:

  • 內部typeof(A)
  • 當聲明一個可變A a = ...
  • new關鍵字之後:new A()

只有類型被考慮。因爲在這種情況下,A引用一個變量會導致無效的語法,因此明確指出該類型的含義,因此規範允許它。

規則有點煩人的一種情況是當你想引用類的靜態成員。例如A.CallStaticMethod()。這裏有一個表達式上下文,它指的是變量A而不是類A

+0

hmmmm,輸入後再讀一遍本書,我終於明白了A.CallStaticMethod()這個東西。它會有編譯錯誤,因爲A被識別爲字符串,並且字符串沒有CallStaticMethod()。在這個例子中隱藏了A類。 – athos