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

时间:2014-04-30 13:52:16

标签: c# .net

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

5 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

  

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

否 - 访问权限不是方法签名的一部分,因此这将是一次冲突。想一想,编译器如何知道是否绑定到publicprivate构造函数?

答案 2 :(得分:0)

不,你不能。

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

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};
    }
}

答案 3 :(得分:0)

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

    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;
    }

这利用了构造函数链接来做一些我称之为累积构造的东西。

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

答案 4 :(得分:0)

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

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

您只能通过使用不同类型的参数或不同数量的参数来实现,这些参数也可以作为方法签名调用。

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

  

8.6.6构造函数重载

     

构造函数的重载与方法的重载相同。每个类实例创建表达式(第15.8节)在编译时解决重载。