2016-07-12 135 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 
} 
} 

希望很清楚。

相关问题