C#中构造函数的访问说明符

本文关键字:访问 说明符 构造函数 | 更新日期: 2023-09-27 18:01:12

我是否可以在C#中拥有具有相同参数列表但一个私有和一个公共或任何其他访问说明符的构造函数。提前谢谢。

C#中构造函数的访问说明符

不,您不能通过改变访问修饰符(或方法的返回类型(来重载构造函数或方法。只有当成员具有不同的签名时,才能重载成员。

我是否可以在C#中拥有具有相同参数列表但一个私有和一个公共或任何其他访问说明符的构造函数。

否-访问不是方法签名的一部分,所以这将是一个冲突。想想看,编译器如何知道是绑定到public还是private构造函数?

构造函数可以看作是一种特殊的方法。在创建实例时,框架会隐式调用构造函数。但是方法和构造函数的重载标准是相同的。

不能在C#中通过返回类型或访问修饰符进行重载。

您只能通过具有不同类型的参数或不同数量的参数来实现这一点,这些参数也可以被称为方法签名。

来自MSDN http://msdn.microsoft.com/en-us/library/aa268049%28v=vs.60%29.aspx:

8.6.6施工人员超载

构造函数的重载在行为上与方法的重载相同。重载在编译时由每个类实例创建表达式来解决(§15.8(

在这种情况下,我通常要做的是拥有一个由一个或多个其他构造函数调用的私有"初始化器"构造函数。当然,这需要一个不同的参数列表。例如(非常迂腐(:

    private Person ( String firstName, int age )
    {
        this.firstName = firstName;
        this.age = age;
    }
    public Person ( String firstName, String lastName, int age )
        :this(firstName, age)
    {
        this.lastName = lastName;
    }

这利用了构造函数链接的优势来做我称之为累积构造的事情。

尽管这个例子有一个私有构造函数,但它很迂腐,在这个特定的例子中你可能不需要它——它只是为了展示这个概念。

不,你不能。

您可以创建一个私有构造函数和任意数量的静态方法(使用您喜欢的任何访问修饰符(,这些方法返回实例化的对象。

public class MyClass
{
    public string Prop1 { get; set; }
    public string Prop2 { get; set; }
    private MyClass() {}
    public static MyClass InstanceWithProp1(string prop1)
    {
        return new MyClass() {Prop1 = prop1};
    }
    public static MyClass InstanceWithProp2(string prop2)
    {
        return new MyClass() {Prop2 = prop2};
    }
}