C# (联合国)C中的继承#

C# (联合国)C中的继承#,c#,asp.net,inheritance,C#,Asp.net,Inheritance,这很奇怪,但我真的需要它。我需要继承一个类而不继承它们的基类,但我不知道如何继承 我有一个来自如下框架的基本抽象实体类: public abstract class AbstractEntity { public bool Validate(){}; public List<ValidationErrors> erros; // and so many more properties and methods } public interface ICont

这很奇怪,但我真的需要它。我需要继承一个类而不继承它们的基类,但我不知道如何继承

我有一个来自如下框架的基本抽象实体类:

public abstract class AbstractEntity
{
    public bool Validate(){};
    public List<ValidationErrors> erros;

    // and so many more properties and methods
}
public interface IContact
{
    int Id { get; }
    string Name { get; }
    string Phone { get; }
}
我在Web服务上使用这个类Contact,我只需要自定义属性,如何在没有继承抽象实体的情况下重用这个类Contact

我不想重复这个类。如果这听起来很愚蠢,我很抱歉

编辑

这是一个已经用代码生成器创建的项目,我不能更改类结构。出于这个原因,我想在不使用抽象类的情况下实例化该类


由于我现在无法更改它,并且迫切需要它,因此我将复制这个没有抽象的类并使用它

听起来你需要一个界面

从AbstractEntity提取接口(IAbstractEntity)。或者可能是我与联系人的联系——问题不是很清楚哪个类具有您想要共享的方法和属性。看起来是这样的:

public abstract class AbstractEntity
{
    public bool Validate(){};
    public List<ValidationErrors> erros;

    // and so many more properties and methods
}
public interface IContact
{
    int Id { get; }
    string Name { get; }
    string Phone { get; }
}
在触点上执行IContact。然后修改仅使用IContact中特定方法/属性的任何方法,以使用IContact而不是Contact

我同意杰米·彭尼的说法,听起来你应该读一读


最后,如果这是一个DTO,您可能会发现自己需要类似于

的东西听起来您需要一个接口

从AbstractEntity提取接口(IAbstractEntity)。或者可能是我与联系人的联系——问题不是很清楚哪个类具有您想要共享的方法和属性。看起来是这样的:

public abstract class AbstractEntity
{
    public bool Validate(){};
    public List<ValidationErrors> erros;

    // and so many more properties and methods
}
public interface IContact
{
    int Id { get; }
    string Name { get; }
    string Phone { get; }
}
在触点上执行IContact。然后修改仅使用IContact中特定方法/属性的任何方法,以使用IContact而不是Contact

我同意杰米·彭尼的说法,听起来你应该读一读


最后,如果这是一个DTO,您可能会发现自己需要类似于

的东西,据我所知,您无法打破继承链。如果希望联系人不继承AbstractEntity,则必须创建一个新的联系人类,该类不将AbstractEntity列为父级


抱歉,这正是C#的设计方式。

据我所知,您无法打破继承链。如果希望联系人不继承AbstractEntity,则必须创建一个新的联系人类,该类不将AbstractEntity列为父级

抱歉,这正是C#的设计方式。

试试遏制

public class NotAnEntity 
{
    public Contact { get; set; }

    public static implicit operator Contact(NotAnEntity other)
    {
        return other.Contact;
    }
}
尝试遏制

public class NotAnEntity 
{
    public Contact { get; set; }

    public static implicit operator Contact(NotAnEntity other)
    {
        return other.Contact;
    }
}

虽然我认为使用一个简单的DTO可能是最简单的解决方案,但另一个选择是在Contact类上使用它,让它只序列化您关心的属性。当然,在其他情况下,这也会影响对象的XML序列化,而不仅仅是web服务。

虽然我认为使用简单的DTO可能是最简单的解决方案,但另一种选择是在Contact类上对您关心的属性进行序列化。当然,在其他情况下,这也会影响对象的XML序列化,不仅仅是web服务。

您可以保护
AbstractEntity
的属性,这样它就不会在外部访问,也不会被序列化。或者您可以将它们标记为不可序列化。@Anthony Pegram-我想他想要一个DTO,而不必实际编写DTO+转换代码。您是否包含一个DTO
在您的类中联系
?您可以保护
AbstractEntity
的属性,使其在外部不可访问且不会序列化。或者您可以将其标记为不可序列化。@Anthony Pegram-我想他想要一个DTO,而不必实际编写DTO+转换代码。您是否包含一个DTO
联系你班上的
?是的,这是正确的方法,但是项目已经用代码生成器创建,我现在不能更改类结构。出于这个原因,我想在不使用抽象类的情况下实例化该类。是的,这是正确的方法,但是项目已经使用代码生成器创建,我现在无法更改类结构。出于这个原因,我想在不使用抽象类的情况下实例化该类。