我有一个像这样的框架的基本抽象实体类:
public abstract class AbstractEntity
{
public bool Validate(){};
public List<ValidationErrors> erros;
// and so many more properties and methods
}
我的自定义类继承了这个抽象基类:
public class Contact : AbstractEntity
{
public int id
public string name;
public string phone;
}
我在网络服务上使用此类联系,我只需要自定义属性,如何重新使用联系类而不继承 AbstractEntity ?
我不想复制这个类。对不起,如果这听起来很愚蠢。
修改
这是一个已经用代码生成器创建的项目,我无法更改类结构。出于这个原因,我想在不使用抽象类的情况下实例化该类。
由于我现在无法改变它并迫切需要它,我将在没有抽象的情况下复制这个类并使用它。
答案 0 :(得分:2)
听起来你需要一个界面。
从AbstractEntity中提取接口(IAbstractEntity)。或者也许来自联系人的IContact-关于哪个类具有您想要共享的方法和属性的问题不是很清楚。它看起来像这样:
public interface IContact
{
int Id { get; }
string Name { get; }
string Phone { get; }
}
在联系人上实施IContact。然后修改只使用IContact中特定方法/属性的任何方法来使用IContact而不是Contact。
我同意@ Jamie-Penney,听起来你应该阅读http://en.wikipedia.org/wiki/Data_transfer_object
最后,如果这是一个DTO,你可能会发现自己需要像AutoMapper这样的东西
答案 1 :(得分:1)
据我所知,你无法打破继承链。如果您想要一个不继承AbstractEntity的Contact,您必须创建一个不将AbstractEntity列为父级的新Contact类。
很抱歉,这就是C#的设计方式。
答案 2 :(得分:0)
尝试遏制。
public class NotAnEntity
{
public Contact { get; set; }
public static implicit operator Contact(NotAnEntity other)
{
return other.Contact;
}
}
答案 3 :(得分:0)
虽然我认为使用简单的DTO可能是最简单的解决方案,但另一个选择是在您的Contact类上implement the IXMLSerializable interface并让它只序列化您关注的属性。当然,这也会影响其他情况下对象的XML序列化,而不仅仅是Web服务。