为什么委托在静态方法中不能引用非静态方法?为什么在C#中使用委托时需要使用STATIC函数?类程序{委托intFun(inta,intb);staticvoidMain(string[]args){FunF1=newFun(Add);intRes=F1(2,3);安慰。写行(资源);}**staticpublicintAdd(inta,intb)**{int结果;结果=a+b;返回结果;这不是必需的”。但是你的Main方法是静态的,所以它不能调用非静态方法。尝试这样的事情(这不是一个很好的做事方式-你真的应该创建一个新类,但它不会't改变你的样本):classProgram{delegateintFun(inta,intb);voidExecute(){FunF1=newFun(Add);intRes=F1(2,3);Console.WriteLine(Res);}staticvoidMain(string[]args){varprogram=newProgram();program.Execute();}intAdd(inta,intb){intresult;result=a+b;returnresult;}您的函数需要是静态的,因为您是从静态方法Main调用它的。您可以使该方法成为非静态方法:classProgram{delegateintFun(inta,intb);staticvoidMain(string[]args){Programp=newProgram();//创建ProgramFun实例F1=newFun(p.Add);//现在你的非静态方法可以被引用了intRes=F1(2,3);控制台.WriteLine(Res);}publicintAdd(inta,intb){int结果;结果=a+b;返回结果;在这种情况下,由于您没有创建任何类的实例,唯一的选择是静态函数。如果要实例化Program类型的对象,可以使用实例方法。委托基本上遵循与方法相同的规则。在提供的示例中,您的委托必须是静态的,因为您是从静态方法调用它的。同样,这不起作用:staticvoidMain(string[]args){intRes=Add(3,4);控制台.WriteLine(Res);}publicintAdd(inta,intb){int结果;结果=a+b;返回结果;但是,如果你将事物移动到这样的非静态上下文中:classMyClass{publicMyClass(){FunF1=newFun(Add);intRes=F1(2,3);控制台.WriteLine(Res);}publicintAdd(inta,intb){int结果;结果=a+b;返回结果;你可以有一个带有非静态方法的委托。无需创建静态方法来传递委托。但是非静态方法应该在不同的类中声明,并且必须使用该类的实例进行访问。DelegateNameDN=newDelegateName(类的实例。方法名)以上是C#学习教程:为什么委托在静态方法中不能引用非静态方法?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
