我想使用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; }
}
}
答案 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
。
你可能考虑的另一件事是作曲而不是继承。 Business
和DbTools
应该从同一个基类继承似乎并不自然,因此有一个(非抽象)ErrorBase
类来实现{{1}并且IError
和Business
具有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
属性,允许您的对象包含多个错误,这有时可能很有用。