如何使用类作为基础,但是公开隐藏类类型?

Jam*_*mes 1 c#

我目前只是通过通用接口公开属性,例如

public interface IBaseClass
{
    int ID { get; set; }
}

internal class MyBaseClass : IBaseClass
{
    public MyBaseClass() { }
    public int ID { get; set; }
}

public class MyExposedClass : IBaseClass
{
    private MyBaseClass _base = new MyBaseClass();

    public int ID
    {
        get { return _base.ID; }
        set { _base.ID = value; }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在我的主应用程序中我可以做到:

IBaseClass c = new MyExposedClass();
c.ID = 12345;
Run Code Online (Sandbox Code Playgroud)

但做不到:

MyBaseClass b = new MyBaseClass();
Run Code Online (Sandbox Code Playgroud)

这是我想要的行为.

但是,我只是想知道这是否是正确的方法?或者,如果有更好的方法?

Dar*_*rov 6

如果你只想防止实例化,你可以做出MyBaseClass抽象(使它的构造函数也受到保护 - 这是一个很好的设计)并MyExposedClass从中衍生出来.如果你想完全隐藏类型,你的方法似乎很好.