2012-06-12 53 views
1

是否可以正常類與部分類這樣的組合:合併分部類與普通類

public class ClassA 
{ 
    public string PropertyA {get; set;} 
} 

public partial class ClassA 
{ 
    public string PropertyB {get; set;} 
} 

代碼的結果應該:

var instance = new ClassA(); 

instance.PropertyA = "Something"; 
instance.PropertyB = "Something else"; 

不支持C#這模式?

謝謝大家提前!

+4

你是否試過編寫這段代碼? – V4Vendetta

+0

我做了,但沒有奏效。所以我希望是否有我缺少的東西或其他替代方案來實現相同的結果?乾杯。 –

回答

1

否。部分類的所有部分必須包含partial修飾符。來自C#4語言規範的第10.2節:

部分類型聲明的每個部分都必須包含部分修飾符。它必須具有相同的名稱並與其他部分在相同的名稱空間或類型聲明中聲明。部分修飾語表明類型聲明的其他部分可能存在於其他地方,但是這些附加部分的存在並不是必需的;對於包含部分修飾符的單個聲明的類型是有效的。

部分類型的所有部分必須一起編譯,以便可以在編譯時將這些部分合併爲單個類型聲明。部分類型明確地不允許擴展已編譯的類型。

(重點煤礦。)

+0

)謝謝,我希望未來版本的C#將支持類似於我在原問題中提出了要求 –

4

簡短的回答:的MSDN指出here

所有部件必須使用partial關鍵字。所有的部件必須在編譯時可用來形成最終的類型。所有部分必須具有相同的可訪問性,例如公共,私人等。

+2

不幸的是,當語言規範說明(在第10.2節的第二段)中,MSDN明確將其稱爲關鍵字時,它不是*關鍵字:( –

0

上一類partial單打獨鬥的所有文件必須與partial定義類。此外,它們必須存在於同一個組件中。

您可以使用多態性來擴展ClassA。還有擴展方法,但按照名稱狀態,您只能擴展方法。

這裏是衍生類,雖然它不完全相同partial

public class ClassA 
{ 

    public string PropertyA { get; set; } 
} 

public class ClassB : ClassA 
{ 
    public string PropertyB { get; set; } 
} 
+0

您是否打算說'公共班ClassB:ClassA'? –

+0

是的,我做過了:(謝謝! – HackedByChinese