财产继承而不重视联合

时间:2015-01-16 18:12:46

标签: c# inheritance properties

我想使用interface或abstract class继承2个类中相同的一些属性;我不想在子类中声明变量。

有可能这样做吗?

家长班:

interface IError
{
    DateTime GETDATE { get; set; }
    string ERROR_NUMBER { get; set; }
    string ERROR_SEVERITY { get; set; }
    string ERROR_STATE { get; set; }
    string ERROR_PROCEDURE { get; set; }
    string ERROR_LINE { get; set; }
    string ERROR_MESSAGE { get; set; }
}

孩子:

public class Business
{
    public Business()
    {
        this.Id = -1;
        this.Message = "";
    }
    public int Id { get; set; }
    public string Message { get; set; }
}

另一个孩子:

public class DbTools
{
  //Another Class

}

我需要这两个类中的父属性,但如果更改代码如下,我应该使用另一个我不想要的变量:

public class Business : IError
{
    private DateTime m_GetDATE;//I don't want to declare another variable
    public DateTime GETDATE
    {
        get { return m_GetDATE; }
        set { GETDATE = m_GetDATE; }
    }
}

1 个答案:

答案 0 :(得分:2)

听起来你想要一个abstract基类:

public abstract class ErrorBase : IError
{
     public DateTime GETDATE { get; set; }
     //...ditto all the other IError properties
}

然后你可以继承:

public class Business : ErrorBase
{
    // all the ErrorBase properties are inherited
}

您也可以创建基类属性virtual,以防您在任何时候在派生类中需要override

你可能考虑的另一件事是作曲而不是继承。 BusinessDbTools应该从同一个基类继承似乎并不自然,因此有一个(非抽象)ErrorBase类来实现{{1}并且IErrorBusiness具有DbTools属性:

Error

作为奖励,您可以使public class ErrorBase : IError { public DateTime GETDATE { get; set; } //...ditto all the other IError properties } public interface IHaveError { ErrorBase Error { get; set; } } public class Business : IHaveError { public ErrorBase { get; set; } } 实际上为IHaveError并拥有IHaveErrors属性,允许您的对象包含多个错误,这有时可能很有用。