[英]'Lexical' scoping of type parameters in C#
我有兩種情況。
這將失敗:
class F<X>
{
public X X { get; set; }
}
錯誤CS0102:類型' F<X>
'已經包含' X
'的定義
這有效:
class F<X>
{
class G
{
public X X { get; set; }
}
}
唯一的邏輯解釋是在第二個代碼段中,類型參數X不在范圍內,這是不正確的...
為什么類型參數會影響我對類型的定義?
海事組織,為了保持一致,兩者都應該起作用,或者都不應該起作用。
還有其他想法嗎?
PS:我稱它為“詞匯”,但這可能不是正確的術語。
更新:
根據Henk的回答,這是一個顯示相同行為的非通用版本,但可能更容易理解。
失敗:
class F
{
class X { }
public X X { get; set; }
}
作品:
class X { }
class F
{
public X X { get; set; }
}
據我所知,C#編譯器在類型定義邊界創建了一個詞法作用域。
它還暗示類型和成員名稱位於相同的“位置”(或按LISP namespace
)。
G類引入了獨特的命名范圍。 如果省略默認規則,則兩個版本將變為:
public F<X>.X F<X>.X { get; set; } // error
public F<X>.X F<X>.G.X { get; set; } // OK
X
被定義為F
范圍內的類型。 與此類似:
class F
{
public void X();
public int X(); // Bad, trying to redefine X.
class G
{
public string X(); // OK, different scope
}
}
FX
不在G
的范圍之外,但這不會阻止G
定義新的X
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.