c# - 自定义规则 - 禁用子类的构造函数实现

标签 c# visual-studio oop roslyn roslyn-code-analysis

我正在用 C# 编写基于工厂模式的解决方案。

如果有一个名为Animal抽象类Animal 的任何子类都将通过传递类型的工厂模式实例化。

public abstract class Animal
{
    protected abstract void Constructor();

    public Animal()
    {
        Constructor();
    }
}   

public class Dog : Animal
{
    protected override void Constructor()
    {
        //Constructor Code here
    }
} 

我不会让我的任何队友通过在子类中声明自己的公共(public)构造函数(例如:cat)并直接调用构造函数(例如:Animal cat = new Cat( );) 不使用工厂。

如何创建在编译此类时会抛出错误的代码分析规则?

最佳答案

几个选项:

您可以将类、它的派生类和工厂放入它自己的程序集中,并使类的构造函数成为内部类。如果工厂方法是公共(public)的,那么任何引用程序集的东西都只能通过工厂创建它。

另一种选择是使工厂嵌套在 Animal 类中,例如:

public abstract class Animal
{
    protected abstract void Constructor();

    protected Animal()
    {
        Constructor();
    }

    public class Factory
    {
        public static Animal CreateAnimal()
        {
            return new Animal();
        }
    }
}  

关于c# - 自定义规则 - 禁用子类的构造函数实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41952714/

相关文章:

c# - SoundEffect 在从 SpeechLib 分配缓冲区时引发错误

c# - 在 Release模式下的 .NET 程序集的堆栈跟踪中显示行号

Java音乐厅OOP设计

php - 如何使用不限于类范围的全局类?

c# - 在 .csproj 文件中,<None Include ="..."> 的作用是什么?

c# - 类型 'x' 的声明中缺少部分修饰符 - 由设计者自动生成的代码引起

c# - 减少代码的时间复杂度

c# - 无法将 .csproj 转换为 Visual Studio 2010

c++ - Qt 添加编译器

c# - 如何从 List<T> 中删除特定对象