.Net如何为部分类创建构造函数?

时间:2016-07-12 19:54:38

标签: c# asp.net .net constructor partial-classes

我有一个带构造函数的部分类,但构造函数抛出一个错误,因为'已经声明了一个具有相同签名的成员'(另一个部分类中存在同名的构造函数)。如何在名称已被使用时为部分类创建构造函数?

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

2 个答案:

答案 0 :(得分:4)

你做不到。在构建项目时,编译器基本上将所有部分类的文本合并到一个类中。每个类不能有多个具有相同名称和签名的方法(包括构造函数)。

一种选择是为构造函数使用不同的签名,或者修改您的架构以不需要构造函数。例如,您可以使用现有的构造函数,并使用某种Initialize方法运行其他构造函数中的代码。

您也可以使用“部分方法”。这些标记为partial的方法可以从现有构造函数“如果存在”调用。它们被设计为来自代码生成器的部分类的扩展点,但您也可以使用它们。有关详细信息,请参阅MSDN

答案 1 :(得分: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
}
}

希望很清楚。