c# - 关于具有私有(private)、公共(public)和 protected 构造函数的抽象类的一些问题

标签 c# oop

我的第一个问题:抽象类中的 protected 构造函数和公共(public)构造函数有什么区别?

我的第二个问题:如果抽象类有一个私有(private)构造函数,它有意义吗?

提前致谢!

最佳答案

一种可能的设计是在抽象类上使用私有(private)构造函数:

public abstract class BaseClass
{
    private BaseClass(Object param)
    {
        //Do something with parameters
    }

    //Provide various methods that descendant classes will know how to perform

    public static BaseClass FromObject(Object value)
    {
        //Based on object, choose which type of derived class to construct...
    }

    private class HiddenDerivedA : BaseClass
    {
        public HiddenDerivedA(Object value)
            : base(value)
        {
        }
    }

    private class HiddenDerivedB : BaseClass
    {
        public HiddenDerivedB(Object value)
            : base(value)
        {
        }
    }
}

如果派生实现与用于构造它们的选择逻辑紧密耦合,并且您希望提供与其余代码的高度隔离,则此模式很有用。它使您免除了必须支持您明确指定的继承者之外的其他继承者的责任,并允许您将所有私有(private)状态从基类公开到您的派生类。

关于c# - 关于具有私有(private)、公共(public)和 protected 构造函数的抽象类的一些问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3454285/

相关文章:

c# - 模型是否使用 Html.Partial() 通过引用部分 View 传递?

c# - 使用 C# 从网页中抓取 JSON

c# - Http.HttpRequestException Xamarin.forms

c++ - C++ 中的任务列表(具有多种类型的 vector )

java - 如何在长链方法调用中共享内存?

c# - 是否可以停止 ViewModel Decimal 属性强制 "required"验证?

c# - 在构建服务器上使用 Fakes 异常运行单元测试

opengl - 粒子系统设计?

php - Laravel - 如何在没有实例化对象的情况下调用静态函数

javascript - 缩放 HTML5 Canvas 图像