c# - 如何确保一个类在 .NET 中只有 1 个构造函数?

标签 c# .net constructor

好吧,我的问题是不言自明的。我有一个类,我想确保这个类只有 1 个公共(public)构造函数。此外,我还想确保构造函数应该只有 1 个参数。我的类将被许多不同的开发人员修改,我正在寻找一种方法来确保他们不会编写比当前指定更多的构造函数。是否可以?如果是,那么如何?

请注意,我的类继承自另一个类,该类当前没有任何构造函数,但将来可能会有。我不知道这些信息是否会影响答案,但只是想添加它。

请帮忙!
提前致谢!

最佳答案

您可以考虑编写一个单元测试来编码这个设计约束。只要测试没有被摆弄,当约束被打破时,它就会发出警告。

这将是一个很好的案例,可以在您的类(class)中详细说明此约束。

可以扩展以下测试方法以提供可以测试派生类型而不是单个类型的测试。这种方法是一种静态分析,并消除了通过反射进行昂贵的运行时检查所产生的开销。测试可确保在构建时验证设计约束,而不是在代码发布后的运行时验证。

[Test]
public void myClass_must_have_one_single_paramter_ctor()
{
    Type type = typeof(MyClass);

    const BindingFlags Flags = (BindingFlags.Public | BindingFlags.Instance);

    ConstructorInfo[] ctors = type.GetConstructors(Flags);

    Assert.AreEqual(1, ctors.Length, "Ctor count.");

    ParameterInfo[] args = ctors[0].GetParameters();

    Assert.AreEqual(1, args.Length, "Ctor parameter count.");

    Assert.AreEqual(typeof(string), args[0].ParameterType, "Ctor parameter type.");
}

public class MyClass
{
    public MyClass(string woo) {}
}

关于c# - 如何确保一个类在 .NET 中只有 1 个构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4872896/

相关文章:

c# - 如何防止命名空间污染?

.net - 桌面应用程序中的流体布局包装面板/VariableSizedWrapGrid?

C++ 将 int 值分配给结构?关于构造函数和运算符重载的问题

java - 在构造函数中使用 getter 初始化变量

c++ - C++中是否可以在另一个类的构造函数中声明一个类的对象?

c# - 我无法理解 Dart 中的 `Null` 是什么

c# 如何过滤数据库表的列名?

c# - 缺少编译器所需的成员 'microsoft.csharp.runtimebinder.binder.convert'

c# - Garbage Collector、call & callvirt 和 Debug/Release 代码模式执行差异

c# - 跨程序集边界返回/使用动态匿名类型