我正在构建一些与HTTP Web服务交互的代码。要与它进行交互,可以使用HTTP GET请求或使用HTTP POST在其上调用“命令”。
我想创建一个封装和隐藏HttpWebRequest对象的基类(例如,ServiceCommand),但我不相信我希望它公开提供任何功能,只能用于子类。
子类可以是(例如)SearchCommand或FetchCommand,它们将使用基类中受保护方法提供的功能。
基本上,我的问题是:创建仅包含受保护成员但没有公共成员的类是否被视为不良设计。
答案 0 :(得分:2)
一般问题我问自己设计:
最后使用private与public - 如果您认为子类需要访问基类值,请创建受保护的成员变量。无论您是否在基类中拥有公共属性,此变量都将起作用。执行此操作后 - 如果您认为该值在外部有用,则可以在基类中添加get / set。这最终看起来像:
public abstract class BaseClass {
protected object _member;
public object MemberGet { return _member; }
}
public class InheritClass : BaseClass {
// now the base class can "decide" to set the member or implement its own set rules
public static void RoutineThatSetsMember(object value) { _member = value; }
}
我不确定这些是否是每个人都使用的规则,但也许它会对一般设计有帮助(或者至少让对话继续前进)!
答案 1 :(得分:2)
这是一个关于"是A"之间区别的问题。和"有A"。
问候"是A",如果B类继承自接口A或A类,则意味着B是A的一种类型,B应该具有与A相同的行为,而这些行为是由公共成员函数定义。
As"有A",B类只想使用A类的实现,所以B将保留对A的引用,而不是继承自A。
所以对于你的情况来说,它是一个"有A"关系。