gpt4 book ai didi

C# - 在同一个类中允许混合使用私有(private)构造函数和非私有(private)参数构造函数吗?

转载 作者:行者123 更新时间:2023-11-30 19:34:33 25 4
gpt4 key购买 nike

请退伍军人原谅我提出愚蠢的问题。我知 Prop 有私有(private)构造函数的类会阻止实例创建。

class InterestRate
{
// static constructor
static InterestRate()
{
}

//private constructor
private InterestRate()
{
}

// private overloaded constructor
private InterestRate(double d1,double d2)
{
}

// overloaded constructor
public InterestRate(int a,int b)
{
Console.WriteLine("a={0},b={0}",a,b);
}
}

static void Main()
{
//As it is private constructor invokation i can not create a instance
InterestRate firstInstance=new InterestRate();

// non-private overloaded constructor allow me to craete instance
InterestRate r=new InterestRate(10,10);
}

我的问题是,如果具有私有(private)构造函数的类阻止实例创建,为什么该类支持具有非私有(private)构造函数?

最佳答案

私有(private)构造函数不仅防止来自外部世界的实例化——它们通常允许从类内部进行构造。实际上,经常使用私有(private)构造函数来防止实例化的唯一原因是避免编译器默认添加公共(public)无参数构造函数。这是私有(private)构造函数阻碍其他调用者的唯一方式。

例如,假设您有一个类需要在其构造函数中接受一个集合。公共(public)构造函数可能总是采取防御措施,复制集合。但是,您可能会遇到某些情况,类中的代码想要创建一个新实例并且知道它不需要需要复制集合,只需要复制引用。这只是私有(private)构造函数很有意义的一种情况。

不过这确实取决于具体情况。

关于C# - 在同一个类中允许混合使用私有(private)构造函数和非私有(private)参数构造函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1383868/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com