c# 如何从另一个 class 中的通用扩展方法调用 Action

c# how to call an Action from generic extension method in another class

我正在尝试编写一个函数库,供我项目中的所有 classes 使用(一个小的统一游戏)。可能已经有人问过这个问题,但我不确定要搜索什么并且还没有找到任何东西,所以我来了。 我想在库中创建一个函数,该函数接收一个委托参数(或者至少是一个 Action 类型的对象,不确定它是否真的称为委托)并运行它。问题是,此 Action 必须由另一种类型的对象调用并可能修改它(这意味着它必须由另一个对象调用)。我正在考虑为此使用通用扩展方法。 这是我现在的一些代码(虽然这段代码不起作用,但应该非常明确):

    public static class Library 
{
    public static void doStuffandCallMethod<T>(this T self, Action methodToExecute) {
        //DoStuff
        self.methodToExecute();

    }
    
}

这是我对这段代码进行概括的尝试:

public static void WaitAndDo( Action methodToExecute) {
        //DoSuff();
        methodToExecute();
    }

效果很好。 但是,编译器不理解并在class T 中寻找一个名为methodToExecute 的方法,而不是用参数(Action)methodToExecute 描述的方法替换它。 我应该如何从 class Lib 中将此 Action 称为对象自身?

非常感谢那些花时间处理它的人 ;)

编辑:这是一个最小的例子:

public class myObject {
    int number;

    public myObject() {
        number = 0;
    }

    public void method1() {
        Console.WriteLine("Bob is a great guy");
    }
    public void method2() {
        number++;
    }

    public void method3() {
        DoItForMe<myObject>(method2);
    }
}

public class Lib {
    public static void DoItForMe<T>(this T self, Action methodToExecute) {
        self.methodtoExecute();
    }
}

然后从主:

myObject bob = new myObject();
bob.method3();
Console.WriteLine("bob's number is" + bob.number);

应该给出输出

鲍勃的号码是 1

调用methodToExecute时必须不带self,因为这个方法是参数,不是self的方法

public static class Library
{
    public static void DoStuffandCallMethod<T>(this T self, Action methodToExecute)
    {
        //DoStuff
        methodToExecute();
    }
}

DoStuffandCallMethod是你实例的扩展方法,你可以用this:

调用它
public class MyObject
{
    private int number;
    public int Number => number;   // if you want to access from outside.
    // ...

    public void Method2()
    {
        number++;
    }

    public void Method3()
    {
        this.DoStuffandCallMethod(Method2);
    }
}

您正在扩展每种类型。您可以从 int 中调用 DoStuffandCallMethod,...我觉得对于您的问题,接口是比扩展方法更好的方法。