为什么我们需要私有构造函数?

2024-02-02

如果一个类有一个私有构造函数,那么它就不能被实例化。 因此,如果我不想实例化我的类并仍然使用它,那么我可以将其设为静态。

私有构造函数有什么用?

还有,它是用在单例类中的,但是除此之外,还有什么其他用途吗?

(注意:我排除上述单例情况的原因是,我不明白为什么当有可用的静态类时我们根本需要单例。您可能不会因为我对问题的困惑而回答这个问题。)


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

带有嵌套子项的伪密封

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

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

public abstract class BaseClass
{
    private BaseClass() { }

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

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

基础构造函数

它们还可以用于创建从不同的、更易于访问的构造函数调用的“基本”构造函数。

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) { }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我们需要私有构造函数? 的相关文章

随机推荐

  • 警告:mysqli_connect():(HY000/2002):尝试以访问权限禁止的方式访问套接字

    这两天我一直在尝试解决这个问题 警告 mysqli connect HY000 2002 尝试以访问权限禁止的方式访问套接字 我的托管是Azure 他的界面非常糟糕 编程语言是PHP 我的数据库与域位于同一资源组中 帐户数据是正确的 我做错
  • 网络中的边长x

    我正在尝试通过以下代码调整两个节点之间的边的长度 但显然这不起作用 谁能指导我在哪里犯了错误 请注意 我已经看过这个帖子了 如何在 Networkx 中指定边长度来计算最短距离 https stackoverflow com questio
  • 如何在 Android Jelly Bean Launcher 中添加自定义视图

    我正在努力在 android 中制作自定义启动器 我参考了android的Jellybean启动器的代码 现在我想对这个启动器进行一些修改 我想要的是 据我们所知 默认有五个工作区屏幕 我想在任何一个工作区屏幕中添加自定义视图 我的 xml
  • 从数据库中提取行(包括相关行)

    我想为 Oracle 数据库中的一行生成插入字符串 包括其他表中的所有依赖行 及其依赖行 Example CREATE TABLE a a id number PRIMARY KEY name varchar2 100 CREATE TAB
  • PDO + MySQL 和损坏的 UTF-8 编码 [重复]

    这个问题在这里已经有答案了 我在 PHP 中将 PDO 库与 MySQL 数据库一起使用 但是如果我插入任何以 UTF 8 编码的数据 例如阿拉伯单词 它就会插入到数据库中 但作为 在我自己的框架中 创建 PDO 连接后 我发送两个查询 S
  • Solr:结合 EdgeNGramFilterFactory 和 NGramFilterFactory

    我有一种情况需要同时使用 EdgeNGramFilterFactory 和 NGramFilterFactory 我正在使用 NGramFilterFactory 执行 包含 样式搜索 最小字符数为 2 我还想搜索第一个字母 例如带有前面
  • 如何通过蓝牙查询远程手机是否支持PBAP?

    假设两部Android手机通过蓝牙配对并建立连接 如何在客户端以编程方式确定远程设备 服务器 是否支持蓝牙配置文件 例如 PBAP 如果它确实支持 那么如何以编程方式启动与远程设备的 PBAP 会话 我在网上进行了广泛的搜索 但到目前为止还
  • Apache Flink:设置并行度的指南?

    我正在尝试获取一些简单的规则或指南来设置哪些值 操作员或工作 并行性 在我看来 它应该是一个数字 例如 假设我有 2 台任务管理器机器 每台都有 4 个任务槽 假设集群上没有运行其他作业 我会设置并行度吗 用于操作 喜欢过滤并映射到 8 如
  • 如何将 Jest 模拟函数的范围限制为单个测试

    我正在使用 Jest 测试库 React 编写功能测试 经过几天的绞尽脑汁 我发现当你使用 mockResolvedValue or mockResolvedValueOnce 嘲笑的范围不仅限于该测试 import React from
  • C++ 多态性和指针向量问题

    考虑以下示例代码 class Foo class Bar public Foo class FooCollection protected vector
  • 如何阻止android editText中的特殊字符?没有 Android:数字

    如何阻止android editText中的特殊字符 通过不使用机器人 数字 有没有其他方法 甚至以编程方式 EditText 有一个 onTextChanged 监听器 你可以跟踪用户输入的字符 如果该字符非法 你只需将其删除 这不是最优
  • Celery 和 RabbitMQ - 队列优先级、消费者优先级、任务优先级

    在我的 python 应用程序中 我使用 Celery 作为任务生产者和消费者 使用 RabbitMQ 作为代理 现在 我正在实施优先级 起初 它看起来根本不起作用 因为根据文档 我刚刚添加了x max priority队列的参数 我更深入
  • MKPolygon 初始化错误“调用中参数‘interiorPolygons’缺少参数”/“调用中存在额外参数”

    我正在尝试转换 MapKit 中的 Objective C 代码MKPolygon参考文献清单6 9 https developer apple com library prerelease ios documentation UserEx
  • Gradle下载源码依赖

    在 gradle 中 我有以下 build gradle 这会导致许多 JAR 被复制到 sources 文件夹中 但只有 jersey media moxy 2 22 2 sources jar 实际上包含源代码 defaultTasks
  • MVVM ViewModel 单例

    如果您不需要每个屏幕的多个实例 那么将所有 viewModels 设置为单例是错误的做法吗 是的 因为单身人士是邪恶的 https learn microsoft com en us archive blogs scottdensmore
  • 数据帧字符串操作

    我有一个数据框 其中有一列数据如下所示 AAH AAH AAR UN AAR UN AAR UN AAR UN AAV AAV AAV 我想我需要使用 apply 方法来修剪列数据 因此 如果句点之后有任何内容 则保持数据不变 但如果句点之
  • 无法连接到火狐浏览器

    我正在研究 Selenium 目前我有一个集线器连接到两个运行 Linux 和所有浏览器的虚拟机 我能够启动浏览器 直到它突然停止 Firefox 或任何其他浏览器无法启动 我收到以下错误 45000 毫秒后无法通过端口 7055 连接到主
  • Cython 程序比普通 Python 慢(10M 选项 3.5s vs 3.25s Black Scholes)-我错过了什么?

    好的 这是我的第一个 Cython 程序 它是为欧洲期货期权定价的代码 没有股息的 Black Scholes 它在 10M 选项上的运行时间为 3 5 秒 而我在下面发布的直接使用 numpy Python 3 25 的代码 谁能指出为什
  • 如何为 UserControl 中的 TabControl 提供设计器支持,以便我可以将控件拖/放到选项卡页上?

    我有一个用户控件 其中包含一个Panel 和一个TabControl 我为两者启用了设计时支持 我可以将工具箱中的控件拖 放到用户控件中的面板控件上 我还可以通过 TabControl 上的设计器添加和删除选项卡页 但是 我无法将任何控件拖
  • 为什么我们需要私有构造函数?

    如果一个类有一个私有构造函数 那么它就不能被实例化 因此 如果我不想实例化我的类并仍然使用它 那么我可以将其设为静态 私有构造函数有什么用 还有 它是用在单例类中的 但是除此之外 还有什么其他用途吗 注意 我排除上述单例情况的原因是 我不明