2011-05-11 49 views
1

是否有任何方法可以在部分類中重用方法/變量名?部分類中相同源文件中的變量作用域

類似於internal它在彙編級別定義了一個變量作用域,但是這次在源文件級別。因此,我們可以在另一個代碼文件中使用相同的名稱,並且該變量可用於相同代碼(* .cs)文件中的其他成員。

回答

1

無論如何重用 部分 類的方法/變量名嗎?

不,因爲部分類只是意味着實際的類被分成多個文件。在編譯時它們被組合成一個類,並且通常應用的所有相同規則都適用。

我不知道你想要做什麼的細節,但我懷疑你可以有兩個不同的類,並有一個從另一個繼承。標記方法等內部而不是私人的,然後子類可以看到他們像他們在同一類。

如果您絕對需要在子類中使用相同的變量名稱,則可以使用新關鍵字new string Foo = "this is a new string.";,它將忽略基類中舊的Foo字符串並使用剛纔重新聲明的字符串。

從C#4.0規格:

隨着局部方法 除外(§10.2.7),該組中多個部分中聲明一個 類型的成員的是 簡單集合的聯合在每個部分聲明的成員 。 各機構的型號聲明 所有部分共享相同的聲明空間 (§3.3),並且每個成員 (§3.7)的範圍擴展到所有 部分的機構。 任何成員的可訪問性域始終包含封閉類型的所有 部分;在一個部分中聲明的私人成員 可以從另一部分訪問,並且可以自由地訪問 。在 類型的多個部分中聲明相同的 成員時,編譯時錯誤爲 ,除非該成員是具有部分修飾符的 類型成員。

partial class A 
{ 
    int x;      // Error, cannot declare x more than once 
    partial class Inner  // Ok, Inner is a partial type 
    { 
     int y; 
    } 
} 
partial class A 
{ 
    int x;      // Error, cannot declare x more than once 
    partial class Inner  // Ok, Inner is a partial type 
    { 
     int z; 
    } 
} 
+0

但編譯器可以根據這種變量定義在它的內部表中重命名它們。 – Xaqron 2011-05-11 13:18:28

+0

是的,這是真的,你可以做到這一點,但不僅僅是更簡單,只是強制規則,你必須命名變量不同?當存在更簡單的解決方案時,允許兩個文件具有相同的變量名稱並組合以形成相同的類,這涉及很多語義。 – kemiller2002 2011-05-11 13:21:58

0

目前你沒有這樣的選項。

部分類是一個語法糖。所有零件一經編譯就成爲同一類。

0

不,最不易訪問的修飾符是私有的,並且將跨越整個班級。

你應該真的考慮爲什麼你甚至會需要這個。我不知道自己是不是創造性的(希望如此),但是我發現很難描繪出一個場景,這是真正的要求。一個並不奇怪的就是這樣。

+0

好的。我使用大部分類的部分類,其中一個方法是多行代碼。那麼如果這個方法有一些輔助方法,我會把它們放在同一個文件中。不幸的是,最小範圍是私有的,對整個部分類是公開的。這與我們需要部分類的原因相同。 – Xaqron 2011-05-11 13:23:01

+0

您不必在單個類中編寫所有這些代碼。即使是單一的大型方法,您也可能會迷失課程。 – 2011-05-11 13:36:05