C# C委托是否可以指向另一个类/对象的方法?
在这里,我希望获得一个类似委托的函数指针,指向另一个名为internal的类中的类方法,然后将其传递给静态函数,如下所示:C# C委托是否可以指向另一个类/对象的方法?,c#,function,class,methods,delegates,C#,Function,Class,Methods,Delegates,在这里,我希望获得一个类似委托的函数指针,指向另一个名为internal的类中的类方法,然后将其传递给静态函数,如下所示: public class Inner { public int M = 3; public void F() { Console.WriteLine("f"); } public void G() { Console.WriteLine("g"); } } class Program { public static void Caller(A
public class Inner
{
public int M = 3;
public void F() { Console.WriteLine("f"); }
public void G() { Console.WriteLine("g"); }
}
class Program
{
public static void Caller(Action a)
{
a();
}
static void Main(string[] args)
{
var i = new Inner();
var f = i.F;
var g = i.G;
f();//error
g();//error
Program.Caller(f);
Console.WriteLine("Hello World!");
}
}
我来自c/c++,在c/c++中,像这样的函数指针非常简单,但是这个c代码无法编译。我在谷歌上搜索发现,几乎所有的委托解释都是关于指向其内部类方法的委托的
我的问题是,如何修复代码以使其工作?您不能在C中的隐式变量中设置methods group,因此,如果您只是在操作中更改2个变量,它就工作了 公共阶级内部 { 公共int M=3; public void F{Console.WriteLinef;} public void G{Console.WriteLineg;} } 班级计划 { 公共静态无效调用 { A. } 静态环[]args { var i=新的内部变量; 作用f=i.f; 动作g=i.g; F G 程序调用方; Console.WriteLineHello World!; } }
您不能在C中的隐式变量中设置methods group,所以,若您只是在实际操作中更改了2var,它就可以工作了 公共阶级内部 { 公共int M=3; public void F{Console.WriteLinef;} public void G{Console.WriteLineg;} } 班级计划 { 公共静态无效调用 { A. } 静态环[]args { var i=新的内部变量; 作用f=i.f; 动作g=i.g; F G 程序调用方; Console.WriteLineHello World!; } } highlight是问题的原因,但没有真正解释原因 这是因为i.F是一个方法组,而不是一个特定的方法指针。例如,imagine Inner的定义如下:
public class Inner
{
public void F() { Console.WriteLine("f"); }
public void F(string name) { Console.WriteLine(name); }
}
i.F.会参考哪种方法?F还是F字符串
因此,您需要显式定义变量类型,或强制转换指针:
Action f = i.F;
或:
highlight是问题的原因,但没有真正解释原因
这是因为i.F是一个方法组,而不是一个特定的方法指针。例如,imagine Inner的定义如下:
public class Inner
{
public void F() { Console.WriteLine("f"); }
public void F(string name) { Console.WriteLine(name); }
}
i.F.会参考哪种方法?F还是F字符串
因此,您需要显式定义变量类型,或强制转换指针:
Action f = i.F;
或:
到目前为止,答案是可行的,但是如果要在更大的上下文中使用,您可能需要阅读依赖注入。Unity是.Net中最常用的框架之一。到目前为止,答案是可行的,但是如果要在更大的环境中使用,您可能需要阅读依赖注入。Unity是.Net中最常用的框架之一。