我有一组属性约20个,我需要在两个不同的实体(类)中进行分层覆盖设置系统。
所以,我能想到的简单想法是,用这20个公共属性创建一个抽象类,并在两个实体中继承抽象类。
但这不会起作用,因为我还有一些更常见的属性,这些属性对所有实体都是通用的。所以我已经继承了所有的实体。这20个属性并不是所有实体共有的(只有两个 - 三个)。因此,我不能在现有的抽象类中添加这20个属性。
我尝试创建一个接口并实现它,但后来我忘了我需要在具体的类中实现它。因此,如果我必须在具体的课程中定义它们,那就没有帮助解决我的问题。
有什么想法吗?这样做的正确方法是什么?在不久的将来,我可能会在几个实体中拥有一些更常见的属性。那么我应该怎样做,以保持公共属性之间的一致性,而无需重新访问和重写每个实体中的公共属性?
答案 0 :(得分:2)
让您的“常用设置”类继承自“公共实体”类。然后从通用设置类派生您的设置类。
class common_entity {}
class common_settings : common_entity {}
class settings : common_settings {}
class entity : common_entity {}
答案 1 :(得分:0)
也许我错了,但有时候我们往往需要太多的可重用性。
请参阅此示例代码
public class Person
{
public string Name { get; set; }
}
public class Company
{
public string Name { get; set; }
}
只是因为我们认为两个类共享一个Name
属性,我们应该创建一个基类:
public class Entity
{
public string Name { get; set; }
}
public class Person : Entity
{
}
public class Company : Entity
{
}
我肯定会定义一个基本实体类,因为任何实体都应该拥有一个唯一的标识符,但不能用于Name
。如果实体的一个子集应该拥有Name
,我将定义一个interface
,它将由具体实体实现或不实现。稍后我会询问对象是否实现了给定的接口(即obj is IWhatever
或var whatever = obj as IWhatever
)。
请检查一下你说的话:
我有一组属性约20个,我需要两个属性 不同的实体
所以你有两个类应该实现20个属性而你只是因为你可以定义一个interface
并且你需要在这两个类中实现它?
转到interface
方法! Visual Studio是否具有接口实现代码生成?
认为对OOP的一个常见批评是你最终会产生更多的代码,而OOP的关键点是如果你保留你的代码,那么更多的代码并不意味着更少的可维护性 简单且易懂。这不是编码较少,而是 正确编码 。