为什么我可以在构造函数中传递虚函数的函数?
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# 必然有一个有限限制 它看起来有多深并且不会标记它。
当我这样做时,我没有在构造函数警告中收到潜在的虚函数调用:
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# 必然有一个有限限制 它看起来有多深并且不会标记它。