使用 base 调用虚方法

Virtual method being called using base

关于虚拟方法:

protected internal virtual void PopulateGetParameters(
    int id, List<SqlParameter> parameters)
{
}

在继承基础 class 的 class 中被覆盖。令我困惑的是覆盖方法正在回调虚拟方法?

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

虚方法 可以 如果需要可以重写。没有规则反对:

(a) 没有这样做,

(b) 不调用 base 实现。

因为在这种情况下,基础 class 实现什么都不做,最好创建一个接口并在那里定义 PopulateGetParameters。然后调用 base 变得不可能,而不是像您的示例代码当前那样毫无意义。

virtual关键字仅用于允许方法被覆盖。

在 C# 中,默认情况下,方法是 非虚方法,您不能重写非虚方法。这与 Java 相反,默认情况下所有方法都是虚拟的。

在您的情况下,调用该方法的基本实现不会执行任何操作,因为它是空的。不过反正叫它完全没问题,其实也很常见。

您可以找到更多信息here