我有两个不相关的课程
public class ManagedType{
private string id;
private string name;
private string description;
private string version;
private string Properties;
private List<string> baseTypesl
}
public class OtherClass{
private string id;
private string name;
private string description;
private string target;
private string sources;
private List<string> relationships;
}
因此,我建议将id,name,description抽象到一个新的基类中,并让它扩展它。
我的观点是,由于它们不相关,我们不应该这样做。此外,我们永远不应该只为属性扩展类(除非它们是相关的),但仅限于常见行为(这里没有)。请让我知道您对此的看法。
答案 0 :(得分:2)
你可能以前听过这个:“继承代表'是一种'关系'。
要决定是否使用继承,只需问问自己:
ManagedType
和OtherClass
是同一类吗?
如果您的答案为“是”,请创建一个共同的超类。
就这么简单。你还必须考虑在这里使用继承是否会使你的代码以任何方式“更好”。我现在想不出这样的情况,但是如果你看到继承是否存在根本不会影响你的其他代码片段,那么继承可能是不必要的。如果你使用了继承并想到“哦,现在继承,我可以像这样简化我的代码!”,那么把它放在那里可能会很好。
此外,我们不应该仅为属性扩展类(除非它们是相关的),但仅适用于常见行为(这里没有)。
我以前从未听过这样的话。我认为这在很大程度上取决于你所处的具体情况。
答案 1 :(得分:0)
您的理解是正确的。除非他们不属于'is-a'关系,否则将他们置于一个超级阶层之下是没有意义的。
但是,这种关系只有从功能角度来看才会出现。如果您正在构建一个服务类,如Serializable,IEnumerable等,您可能会考虑为一个接口提供3个属性(我可以看到ID,名称和描述)很常见。仅当您从技术服务角度看到此情况时,此选项才适用。但是,如果从功能角度看,你不应该带抽象类。
例如,
public interface Iloggable
{
public string id {get; set;} public
string name {get; set;}
public string description {get; set;}
}
public class ManagedType: Iloggable
{
private string _id, _name,_description;
public string id
{
get
{return _id;}
set {_id = value; }
}
.....
}