C# 将成员函数作为委托参数传入
我有一个基类,它的ctor将委托作为参数,还有一个从中继承的类 以下操作很好:C# 将成员函数作为委托参数传入,c#,delegates,C#,Delegates,我有一个基类,它的ctor将委托作为参数,还有一个从中继承的类 以下操作很好: class Base { public Base(Func<bool> func) { } } class Sub : Base { public Sub() : base(() => true) { } public Sub(int i) : base(() => { return true; })
class Base
{
public Base(Func<bool> func)
{
}
}
class Sub : Base
{
public Sub()
: base(() => true)
{
}
public Sub(int i)
: base(() => { return true; })
{
}
}
class Sub : Base
{
public Sub()
: base(Func)
{
}
private bool Func()
{
return true;
}
}
如果Func
是一个静态方法,它就可以工作。但是我想在函数中使用实例成员
我怎样才能做到这一点呢?正如我所评论的,这在我看来就像是一个X Y问题,而且似乎是一个有缺陷的设计, 您可以将基类更改为只调用虚拟方法并重写它吗
class Base
{
public Base()
{
}
public virtual bool func() {return false};
}
class Sub : Base
{
public Sub()
{
}
public override bool func()
{
return true;
}
}
你也可以在上阅读更多关于它的评论,这在我看来像是一个X Y问题,在我看来似乎是一个有缺陷的设计, 您可以将基类更改为只调用虚拟方法并重写它吗
class Base
{
public Base()
{
}
public virtual bool func() {return false};
}
class Sub : Base
{
public Sub()
{
}
public override bool func()
{
return true;
}
}
你也可以在上阅读更多关于它的内容,这在我看来像是一个X Y问题,你能把你的基类改成只调用一个虚拟方法并覆盖它吗?@Boo这是一个我会支持的答案。。。(提示!)@Boo,它假定委托必须是一个实例方法,而不是简单地允许它是一个实例方法(或任何其他方法)。@Boo我想这会起作用。我太专注于委托了,以至于完全忘记了虚拟方法,甚至是抽象方法。在我看来,这就像是一个X Y问题,你能把你的基类改成只调用一个虚拟方法,然后重写它吗?@Boo这是一个我会赞成的答案。。。(提示!)@Boo,它假定委托必须是一个实例方法,而不是简单地允许它是一个实例方法(或任何其他方法)。@Boo我想这会起作用。我太专注于代理了,以至于我完全忘记了虚拟方法,甚至是抽象方法。是的,我认为这是一条路。谢谢。如果您还希望能够从外部放入任意委托,您可以使用类似于
Func FuncProp
的属性来存储给定委托,或者如果未指定,则引用Func()
方法。然后在任何需要的地方使用它。是的,我想这是一条路。谢谢。如果您还希望能够从外部放入任意委托,您可以使用类似于Func FuncProp
的属性来存储给定委托,或者如果未指定,则引用Func()
方法。然后在需要的地方使用这些财产。