如果一个类有一个私有构造函数,那么它就不能被实例化.

私有构造函数的用途是什么?

此外,它还用于singleton类,但除此之外,还有其他用途吗?

(注意:我之所以排除上面的singleton case ,是因为我不明白当有一个静态类可用时,为什么我们需要一个singleton.你可能不会回答这个问题,因为我对这个问题感到困惑.)

推荐答案

Factory

私有构造函数在使用工厂模式(换句话说,用于获取类的实例而不是显式实例化的静电函数)时很有用.

public class MyClass
{ 
    private static Dictionary<object, MyClass> cache = 
        new Dictionary<object, MyClass>();

    private MyClass() { }

    public static MyClass GetInstance(object data)
    {
        MyClass output;

        if(!cache.TryGetValue(data, out output)) 
            cache.Add(data, output = new MyClass());

        return output;           
    }
}

Pseudo-Sealed with Nested Children

任何从外部类继承的嵌套类都可以访问私有构造函数.

例如,您可以使用它创建一个抽象类,you可以从中继承,但不能从其他任何类继承(internal构造函数在这里也可以将继承限制为单个程序集,但private构造函数强制所有实现都是嵌套类)

public abstract class BaseClass
{
    private BaseClass() { }

    public class SubClass1 : BaseClass
    {
        public SubClass1() : base() { }
    }

    public class SubClass2 : BaseClass
    {
        public SubClass2() : base() { }
    }
}

Base Constructor

它们还可以用于创建"基本"构造函数,这些构造函数是从不同的、更易访问的构造函数调用的.

public class MyClass
{
    private MyClass(object data1, string data2) { }

    public MyClass(object data1) : this(data1, null) { }

    public MyClass(string data2) : this(null, data2) { }

    public MyClass() : this(null, null) { }
}

Asp.net相关问答推荐

包含Include的低速EF核心查询

如何在 asp.net 服务器中使用字体

web.config 部分的单独配置文件

从 Request.Url.AbsolutePath 获取应用相对 url

判断 asp.net mvc 4 应用程序中的 ssl 协议、密码和其他属性

Dotnet core 2.0 身份验证多模式身份 cookie 和 jwt

使用 JSON.NET 解析 json 字符串

ASP.NET URL 重写

如何配置 ASP.NET Core 1.0 以使用本地 IIS 而不是 IIS Express?

Httpclient 该实例已经启动了一个或多个请求.只能在发送第一个请求之前修改属性

上传时验证大文件

无法复制文件.访问路径被拒绝

LINQ to Entities 无法识别 MVC 4 中的System.String ToString()方法

ASP.NET MVC 路由的无限 URL 参数

ASP.NET 身份提供程序 SignInManager 不断返回失败

回发后运行javascript函数

从物理路径获取相对虚拟路径

解耦 ASP.NET MVC 5 标识以允许实现分层应用程序

如何在 ASP.NET 响应中传递大文件?

System.Web.Caching 还是 System.Runtime.Caching 更适合 .NET 4 Web 应用程序