c# - 编码实践 - 使用抽象或私有(private)构造函数

标签 c# access-modifiers

我有一个关于编码练习的问题。我想创建一个无法初始化的类。我相信我有 3 个选择:

  • 抽象修饰符
  • 静态修饰符
  • 私有(private)构造函数

我不想仅仅因为必须将我所有的属性和方法命名为“static”而创建一个静态类——它看起来很乱(而且我不能使用“this”关键字)。

根据 MSDN:

Use the abstract modifier in a class declaration to indicate that a class is intended only to be a base class of other classes.

编辑 不会从此类继承任何内容。

然而,这将是一个解决方案(但在我看来,在这种情况下使用它似乎是错误的)。

或者,我可以创建一个私有(private)构造函数,这样就无法初始化该类。

如果有帮助,原因如下:该类负责启动工作流程。它不需要初始化,因为没有返回任何内容 - 它只需要“启动”。

演示代码

class Program
{
    static void Main(string[] args)
    {
        WorkFlow wf = new WorkFlow(); // this will error which is fine!
        ComplexObject co = new ComplexObject();
        WorkFlow.Begin(co);
        Console.ReadKey();
    }
}

public class WorkFlow 
{
    private WorkFlow()
    {
        //private to prevent initialization but this feels wrong! 
    }

    public static void Begin(ComplexObject co)
    {
        //code to begin the workflow
    }
}

最佳答案

I want to create a class which can't be initialized.

剩下可能的用法:仅静态或基类。

如果您的类将派生自,请使用abstract。在这种情况下,私有(private)/ protected 构造函数将是一个 hack。

您的示例代码看起来更像是一个static 类。以单例为替代。

关于c# - 编码实践 - 使用抽象或私有(private)构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12458757/

相关文章:

C# 开启枚举

c# - .Net 中是否可以将整数枚举设置为任意值

c# - 删除 json 字符串中带有换行符的\r\n

c# - 具有公共(public)方法的私有(private)类?

java - 来自另一个 JFrame 的 JTable 值

c# 将表单添加到项目: Possible to make it internal/private from designer?

c# - Entity Framework 对象上下文刷新

c# - 如何以编程方式生成 XAML 代码?

c# - .NET - 如何创建一个类,以便只有一个其他特定类可以实例化它?

c# - 以下代码中 protected 内部访问说明符的意义