我有一个抽象类,它有一个静态工厂方法来返回它的子类:
public abstract class ITop {
public static ITop MakeMeOne(whatever x) {
if(x == something) {
return BottomA(x);
}
else {
return BottomB(x);
}
}
}
public class BottomA : ITop {
public BottomA(whatever x) {}
}
public class BottomB : ITop {
public BottomB(whatever x) {}
}
我想隐藏BottomA
和BottomB
来自世界其他地方的实现(包括同一程序集中不相关的类)。所以只能通过ITop
访问它们。这看起来很简单,但我无法找到正确的访问器组合来实现它。
修改
各种各样的人都指出我可以把所有内容都放在内部,但是隐藏在同一个程序集中的类是一个关键要求,所以这并不能解决它。
答案 0 :(得分:4)
听起来像私人内部类会解决的问题。
public abstract class ITop {
public static ITop MakeMeOne(whatever x) {
if(x == something) {
return BottomA(x);
}
else {
return BottomB(x);
}
}
private class BottomA : ITop {
public BottomA(whatever x) {}
}
private class BottomB : ITop {
public BottomB(whatever x) {}
}
}
答案 1 :(得分:2)
我将为ITop
定义一个接口,并在其他类中设置'bottom'。如果您希望它们对同一程序集中的其他类型“隐藏”,请将它们定义为ITop
内的私有嵌套类。
public interface ITop
{
}
public abstract class Top : ITop {
public static ITop MakeMeOne(whatever x) {
if(x == something) {
return BottomA(x);
}
else {
return BottomB(x);
}
}
private class BottomA : Top {
public BottomA(whatever x) {}
}
private class BottomB : Top {
public BottomB(whatever x) {}
}
}
答案 2 :(得分:0)
您选择做什么,取决于您想要制作的vfisibel以及您想要隐藏的内容。