我已经检查过了,我确定这个问题还没有被问到,但我的基类中有一个方法,它是虚拟的,我在派生类中覆盖了它。
public MyBaseClass()
{
public virtual void MyBaseMethod()
{
return a + b;
}
}
问题是,VS中有没有办法 - 而不是仅仅使用
自动填充覆盖方法return base.MyMethod();
要使用基本方法中的内容填充该方法,还是使用模板填充它?
例如:
public MyDerivedClass()
{
public override void MyBaseMethod()
{
return a + b; <-- Auto-generated from body of base method
}
}
我知道我可以使用Resharper或通过设置内置的模板来做到这一点:&#39; foreach&#39;,但有没有办法让这种情况一般发生而无需在第一名? 非常感谢。
更新
我的特殊情况(实际上这是两个案例)是我为我的EF实体覆盖我的基础MVC控制器的地方。 我尝试过使用表达式进行过滤,但是它太慢了所以我在需要它的时候回复 - 如果这样,那么就添加这个Where子句,如果然后添加这个Where子句等,但它很好,因为我的派生类知道实体类型是什么,而我的基类只知道它的接口。
在我的基类中:
public virtual IQueryable<T> onBeforeFinalSelect(IQueryable<T> results)
{
return results;
}
在我的派生类中:
public override IQueryable<PostcodePrefixRatingMAP> onBeforeFinalSelect(IQueryable<PostcodePrefixRatingMAP> results)
{
return results
.Include(x => x.PostcodePrefix).AsNoTracking()
.Include(x => x.Rating.RatingType).AsNoTracking()
.Include(x => x.Rating).AsNoTracking();
}
更新2!
好的想象一下。在我的派生类中,它覆盖了我的基本方法 - 这就是我真正想要的 - 我想要它 - 当被覆盖时用预定义的模板填充正文。
例如, 我的基类:
public virtual IQueryable<T> GetFilterWhereClause(IQueryable<T> results)
{
return results;
}
我的派生类:
public override IQueryable<PostcodePrefixRatingMAP> GetFilterWhereClause(IQueryable<PostcodePrefixRatingMAP> results)
{
foreach (var item in this.DataFiltering.Filters)
{
var _intValue = 0;
switch (item.PropertyName)
{
case "Rating.RatingTypeId":
_intValue = item.Value.ToString().ToInt();
results = results.Where(x => x.Rating.RatingTypeId == _intValue);
break;
case "Rating.Description":
results = results.Where(x => x.Rating.Description == item.Value.ToString());
break;
default:
break;
}
}
return results;
}
现在这只是某些实体所需要的,只占我整体实体的一小部分。
答案 0 :(得分:0)
在您的特定情况下,您可以将这些内容添加到Base方法调用中:
基类:
public virtual IQueryable<T> onBeforeFinalSelect(IQueryable<T> results)
{
return results;
}
派生类:
public override IQueryable<PostcodePrefixRatingMAP> onBeforeFinalSelect(IQueryable<PostcodePrefixRatingMAP> results)
{
return base.onBeforeFinalSelect(results)
.Include(x => x.PostcodePrefix).AsNoTracking()
.Include(x => x.Rating.RatingType).AsNoTracking()
.Include(x => x.Rating).AsNoTracking();
}
这项工作是因为您返回IQueryable
答案 1 :(得分:0)
我认为答案是“不”。 Visual Studio不提供复制重写方法体的自动方法。
要通过手动方式快速完成,您可以使用“Peek Definition”(Alt + F12代表我)。创建覆盖并让它用base.XXX
位填充正文后,将光标放在'XXX'部分并查看定义。这将弹出一个窥视窗口,您可以轻松地复制基础实现。