c# - 私有(private)构造函数和公有参数构造函数

标签 c# oop constructor

我听说私有(private)构造函数会阻止从外部世界创建对象。

当我有代码时

public class Product
{
   public string Name { get;set;}
   public double Price {get;set;}
   Product()
   {
   }

   public Product(string _name,double _price)
   {
   }
}

这里我还可以声明一个公有的构造函数(参数),这不会破坏私有(private)构造函数的目的吗?我们什么时候需要在代码中同时使用私有(private)和公共(public)构造函数(参数)?

我需要一个详细的解释。

最佳答案

您使用您描述的模式的原因是当您想要控制如何对象被实例化时。

例如,在您的示例中,您说创建产品的唯一 方法是指定其名称和价格。当然,这是针对外部世界的。您也可以使用其他访问修饰符来做类似的事情,这会产生不同的含义,但这一切都归结为控制您希望对象实例化的方式以及谁将执行此操作。

如果你想完全阻止对象创建,你必须将所有构造函数设为私有(private)(或 protected )。这将强制从其自身(或继承的类)内部创建对象。

此外,正如 Matti 在下面的评论中指出的那样,当您定义一个参数化的构造函数时,您不需要指定一个私有(private)默认构造函数。在这一点上它是隐含的。

关于c# - 私有(private)构造函数和公有参数构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2640191/

相关文章:

c# - 如何按格式转换价格

c# - 在 Monotouch 中下载多个文件的推荐模式(异步/多线程)

c++ - 缺少构造函数调用

java - 为什么我无法在接口(interface)中创建默认方法?

c++ - 构造函数采用自己的类型?

c++ - 具有基类参数的派生类的拷贝构造函数的排序

c# - 以编程方式检查 Http 命名空间保留

c# - ASP.NET Core在提交表单时排除viewmodel的属性

javascript - 如何通过值获取对象的属性名称[JS]

php - 为什么在面向对象的 PHP 中不推荐直接访问属性?