2016-07-12 177 views
2

我有一個構造部分班,但因爲「具有相同簽名的成員已聲明」(同名的構造函數中的其他部分類存在)的構造函數拋出一個錯誤。當名稱已被使用時,如何爲分部類構造一個構造函數?.Net如何爲分部類構造一個構造函數?

public partial class DigitalArchivesAssetsDataContext 
{ 
    public DigitalArchivesAssetsDataContext() 
     : base(System.Configuration.ConfigurationManager.ConnectionStrings["digitalArchivesAssets"].ConnectionString, mappingSource) 
    { 
     OnCreated(); 
    } 
} 
+2

如果構造函數簽名是相同的,爲什麼你需要它在兩個不同的部分類?最終,部分類將被編譯,就像它們被編寫在同一個類中一樣。 – keyboardP

+0

你不能在你的班級中有重複的成員。部分只不過是允許編譯器從多個文件編譯類,但是適用相同的編碼原則,包括沒有重複的成員(包括構造函數)。 – Igor

+0

您在代碼中顯示的方法是現有方法還是您要添加的內容?如果它已經存在,那麼它的目的就是使用'OnCreated'來添加你想要在構造函數被調用時執行的自定義代碼。如果是這種情況,那麼可能是部分方法,事件或可以覆蓋的虛擬方法。 – Igor

回答

4

你不行。編譯器實質上是在構建項目時將所有部分類的文本合併到一個類中。每個類不能有多個具有相同名稱和簽名的方法(包括構造函數)。

一種選擇是使用不同的簽名的構造函數,或修改您的架構,不需要構造函數。例如,你可以使用現有的構造函數,並有一些Initialize方法來運行其他構造函數的代碼。

您也可以使用「部分方法」。這些方法標記爲partial,您可以從現有構造函數調用「如果它們存在」。它們被設計爲來自代碼生成器的部分類的擴展點,但您也可以使用它們。有關更多信息,請參見MSDN

+0

謝謝!我意識到我只需要刪除重複的方法,因爲我只需要它們存在一次。 –

3

你不能因爲在編譯時兩個部分合並在一起,以產生一個單一的類文件創建到分裂部分類匹配簽名多個構造。例如

class ClassRoom 
{ 
private int boycount; //field 
public ClassRoom()  //default constructor 
{ 
    boycount = 30; 
} 
public ClassRoom(int bcount)  //overloaded constructor 
{ 
    boycount = bcount; 
} 
public double Avg()  //method 
{ 
    //statements goes here 
} 
} 

在上面的例子中,我們可以像這樣拆分類。

//Calculation1.cs 
partial class ClassRoom 
{ 
private int boycount; //field 

public ClassRoom()  //default constructor 
{ 
    boycount = 30; 
} 
} 
//Calculation2.cs 
partial class ClassRoom 
{ 
public ClassRoom(int bcount)  //overloaded constructor 
{ 
    boycount = bcount; 
} 
public double Avg()  //method 
{ 
    //statements goes here 
} 
} 

希望很清楚。

相關問題