我目前只是通过通用接口公开属性,例如
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)
这是我想要的行为.
但是,我只是想知道这是否是正确的方法?或者,如果有更好的方法?
如果你只想防止实例化,你可以做出MyBaseClass抽象(使它的构造函数也受到保护 - 这是一个很好的设计)并MyExposedClass从中衍生出来.如果你想完全隐藏类型,你的方法似乎很好.