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

时间:2016-09-14 17:59:39

标签: c# resharper

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

   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可能是虚拟的吗?那么我们不能在构造函数中调用虚函数吗?

1 个答案:

答案 0 :(得分:2)

仅仅因为你 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#必须有一个有限的限制,看起来有多深,并且不会标记这个。