c#中的继承
本文关键字:继承 | 更新日期: 2023-09-27 18:06:33
这很奇怪,但我真的需要它。我需要继承一个类没有继承他们的基类,但我不知道如何。
我有一个基本的抽象实体类从这样的框架:
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;
}
我在webservice上使用这个类Contact,我只需要自定义属性,我如何重用类Contact而不继承AbstractEntity?
我不想重复这个类。对不起,如果这听起来很愚蠢。
编辑
这是一个已经用代码生成器创建的项目,我不能改变类结构。由于这个原因,我想实例化那个类而不使用抽象类。
由于我现在无法更改,并且急需它,所以我将复制这个没有抽象的类并使用它。
听起来你需要一个接口。
从AbstractEntity中提取一个接口(IAbstractEntity)。或者可能是来自Contact的iconcontact——问题不是很清楚哪个类有你想要共享的方法和属性。它看起来像这样:
public interface IContact
{
int Id { get; }
string Name { get; }
string Phone { get; }
}
在联系人上实现IContact。然后修改任何只使用iconcontact中特定方法/属性的方法,使其使用iconcontact而不是Contact。
我同意@Jamie-Penney的观点,听起来你应该看看http://en.wikipedia.org/wiki/Data_transfer_object
最后,如果这是一个DTO,您可能会发现自己需要AutoMapper
据我所知,您无法打破继承链。如果你想要一个不继承AbstractEntity的Contact,你必须创建一个不把AbstractEntity列为父类的新Contact类。
对不起,这就是c#的设计。
尝试收容。
public class NotAnEntity
{
public Contact { get; set; }
public static implicit operator Contact(NotAnEntity other)
{
return other.Contact;
}
}
虽然我认为使用简单的DTO可能是最简单的解决方案,但另一种选择是在Contact类上实现IXMLSerializable接口,并让它只序列化您关心的属性。当然,这也会在其他情况下影响对象的XML序列化,而不仅仅是在web服务中。