为什么我可以在构造函数中传递虚函数的函数?

Why can I pass a func of a virtual function in a constructor?

当我这样做时,我没有在构造函数警告中收到潜在的虚函数调用:

   public abstract class B : A
    {
        protected B(IEngine engine) : base(engine)
        {
            C = new C(CanExecuteChange);
        }

        public C C{ get; }
        public abstract bool CanExecuteChange();
    }

其中 class C 的构造函数采用 Func<bool>

但是 CanExecuteChange 可能是虚拟的?那么我们不能在构造函数中调用虚函数吗?

仅仅因为您CanExecuteChange传递给另一个方法,并不意味着它实际上被调用。如果您的代码如下所示:

public class C
{
    private Func<bool> _func;

    public C(Func<bool> func)
    {
        _func = func;
    }
}

然后 C 的 ctor 只是 存储 传入的 Func 以备后用,没有什么可担心的。

即使 C ctor 确实 调用传递的 Func:

public class C
{
    public C(Func<bool> func)
    {
        Console.WriteLine(func());
    }
}

R# 必然有一个有限限制 它看起来有多深并且不会标记它。