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

本文关键字:函数 构造函数 为什么 | 更新日期: 2023-09-27 18:06:57

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

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

类C的构造函数接受一个Func<bool>

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

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

仅仅因为 CanExecuteChange传递给另一个方法,并不意味着它实际上被调用。如果你的代码看起来像这样:

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

C的向量只是存储传入的 Func以供以后使用,无需担心。

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

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

r#必须有一个有限的限制来决定它的深度,并且不会标记这个