使用base调用虚方法

时间:2015-06-03 19:22:09

标签: c# polymorphism override virtual

关于虚拟方法:

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方法,并且覆盖由于某种原因调用它。

2 个答案:

答案 0 :(得分:2)

如果需要,可以覆盖虚拟方法 。没有规则反对:

(a)不这样做,

(b)没有调用objectA实现。

由于在这个实例中,基类实现什么都不做,最好创建一个接口并在那里定义base。然后调用PopulateGetParameters变得不可能,而不是像目前的示例代码那样毫无意义。

答案 1 :(得分:2)

virtual关键字仅用于允许重写方法。

在C#中,默认情况下,方法是非虚拟,您无法覆盖非虚方法。这与Java相反,默认情况下所有方法都是虚拟的。

在你的情况下,调用方法的基本实现,什么都不做,因为它是空的。但无论如何,称它为完全正常,实际上它很常见。

您可以找到更多信息here