Sar*_*els 3 .net c# inheritance properties
我有以下课程:
Defect - 表示可以在数据库中找到的一种数据FilterQuery - 提供了一种通过设置简单的布尔过滤器来查询数据库的方法两者Defect并FilterQuery实现相同的接口: IDefectProperties.此接口指定数据库中的特定字段.不同的类具有返回Defect实例列表的方法.使用FilterQuery,为特定属性指定一些过滤器IDefectProperties,然后运行查询并返回Defect实例列表.
我的问题是我最终在FilterQuery和中实现了一些完全相同的属性Defect.这两个本质上是不同的类,它们只是共享一些相同的属性.例如:
public DateTime SubmitDateAsDate
{
get { return DateTime.Parse(SubmitDate); }
set { SubmitDate = value.ToString(); }
}
Run Code Online (Sandbox Code Playgroud)
这是一个所需的属性IDefectProperties,取决于一个不同的属性SubmitDate,它返回一个string而不是一个DateTime.现在SubmitDate在Defect和中的实现方式不同FilterQuery,但SubmitDateAsDate完全相同.有没有办法,我可以定义一个方法SubmitDateAsDate中唯一的地方,但两者Defect并FilterQuery提供它作为一个属性? FilterQuery并且Defect已经从两个不同的类继承,我认为无论如何共享一个祖先是没有意义的.我也愿意接受有关我的设计的建议.
当继承没有意义时,组合通常会这样做.
internal class DefectPropertyInternal
{
private IDefectproperty dp
public DefectPropertyInternal(IDefectproperty dp)
{
this.dp = dp;
}
public DateTime SubmitDateAsDate
{
get { return DateTime.Parse(dp.SubmitDate); }
set { dp.SubmitDate = value.ToString(); }
}
}
public class Defect : IDefectProperty
{
private DefectPropertyInternal dpi;
public Defect()
{
this.dpi = new DefectpropertyInternals(this);
}
public DateTime SubmitDateAsDate
{
get { return dpi.SubmitDateAsDate; }
set { dpi.SubmitDateAsDate = value; }
}
}
Run Code Online (Sandbox Code Playgroud)
通过这种方式,DefectPropertyInternals实现了FilterQuery和Defect的所有共享功能,而无需在每个类中重复这一功能.
| 归档时间: |
|
| 查看次数: |
262 次 |
| 最近记录: |