存储静态引用实例方法?

Jon*_*ood 1 c# lambda delegates

我想创建一个包含委托的静态数组.我将使用此数组来查找我需要的委托.例如:

class HandlerID
{
    public int ID { get; set; }
    public Func<int, bool> Handler { get; set; }
}

protected const HandlerID[] HandlerIDs = {
    new SectionRenderer() { ID = SectionTypes.Type1, Handler = MyType1Handler },
    new SectionRenderer() { ID = SectionTypes.Type2, Handler = MyType2Handler },
    // Etc.
}

protected bool MyType1Handler(int arg)
{
    return false;
}

// Etc.
Run Code Online (Sandbox Code Playgroud)

然而,分配给HandlerHandlerID阵列提供了以下错误:

非静态字段,方法或属性"MyType1Handler(int)"需要对象引用

我更喜欢数组,const所以不必为我的每个实例初始化.有没有办法在静态数组中存储实例方法?

SLa*_*aks 5

这没有意义.
当您调用数组中的委托时,他们需要您的类的实例来操作.

因此,每个类实例都需要一组单独的委托.

如果方法实际上不需要操作实例,则可以制作它们static,这将解决问题.

或者,您可以将实例作为委托的参数,并使用调用该方法的lambda表达式: Handler = (instance, arg) => instance.MyType1Handler(arg)

  • 这没有意义.这是"静态",所以没有实例. (2认同)