我需要一些关于为一个应用程序构建我的类的建议,该应用程序模拟了6种不同但相似的类型。这6种类型都有一些属性和方法,它们都将共享。还有一些属性和方法,其中3,4或5将共享,但对其他属性没有任何意义。
目前,我有一个抽象基类:
这似乎不是最好的解决方案。我觉得我已经提供了足够的细节,但如果这没有意义,请告诉我,我会尝试提供更好的描述。
编辑 - 添加代码示例
public abstract class BaseClass
{
//all classes inheriting from BaseClass would use these properties
public string Property1{ get; set; }
public string Property2{ get; set; }
public void Method1() {
//all classes inheriting from BaseClass would use this method
}
//more than one class (but not all classes)
// inheriting from BaseClass would use these properties
public int? Property3 { get; set; }
public bool? Propert4 { get; set; }
public abstract void Method2() {
//more than one class (but not all classes)
// inheriting from BaseClass would use this method
//those not using this method would have empty getters and setters maybe?
}
}
答案 0 :(得分:2)
这似乎不是最好的解决方案。我觉得我已经提供了足够的细节,但如果这没有意义,请告诉我,我会尝试提供更好的描述。
没有什么细节,但听起来你最好在你的班级层次结构中有一个单独的“层”。
类3,4和5可以从一个单独的抽象类派生而来,它继承了你的“基类”。这样就不需要第1类和第2类在其中使用“未使用”的方法和属性。
基本上,“某些子类将使用的属性标记为可为空,以便其中不使用该属性的子类可以为null”不会在基类中,而是添加到子类中,反过来又是3,4和5的子类。
答案 1 :(得分:1)
您应该详细说明层次结构以避免使用nullables。你应该创建
答案 2 :(得分:1)
你知道你可以这样继承吗?
****************************
* *
* FooBase *
* *
****************************
. .
. .
. .
************** *****************
* * * *
* FooA * * FooB *
* * * *
* * * *
************** *****************
. . .
. . .
. . .
. . .
************** ************** **************
* * * * * *
* * * * * *
* FooA_a * * FooA_b * * FooB_a *
* * * * * *
* * * * * *
* * * * * *
************** ************** **************
那么为什么要在FooA而不是FooBase中实现它们时添加可空属性呢?
修改强>
所以Reed Copsey和Felice Pollano打败了我,因为我画的是东西:P
答案 3 :(得分:1)
为什么要使用子类?让您的抽象基类只拥有所有类型共享的方法。将其他方法拉入单独的类,让需要该功能的类与提取的类协作。这会产生更好的凝聚力和松散的耦合。