关于虚拟方法:
protected internal virtual void PopulateGetParameters(
int id, List<SqlParameter> parameters)
{
}
在继承基类的类中重写了哪个。令我困惑的是,最重要的方法是回调虚拟方法吗?
protected override void PopulateGetParameters(
int id, List<SqlParameter> parameters)
{
base.PopulateGetParameters(id, parameters);
parameters.Add(new SqlParameter(this.KeyParamName, id));
}
视为虚拟方法意味着被覆盖。致电base.PopulateGetParameters(id, parameters);
的目的是什么?我也无法真正找到实现的位置base.PopulateGetParameters
是一个空的virtual
方法,并且覆盖由于某种原因调用它。
答案 0 :(得分:2)
如果需要,可以覆盖虚拟方法 。没有规则反对:
(a)不这样做,
(b)没有调用objectA
实现。
由于在这个实例中,基类实现什么都不做,最好创建一个接口并在那里定义base
。然后调用PopulateGetParameters
变得不可能,而不是像目前的示例代码那样毫无意义。
答案 1 :(得分:2)
virtual
关键字仅用于允许重写方法。
在C#中,默认情况下,方法是非虚拟,您无法覆盖非虚方法。这与Java相反,默认情况下所有方法都是虚拟的。
在你的情况下,调用方法的基本实现,什么都不做,因为它是空的。但无论如何,称它为完全正常,实际上它很常见。
您可以找到更多信息here。