问题描述
看了一本书这样写道:委托是不可变类型,一旦创建之后,就无法使其指向另一个方法。这是我测试的代码:PublicClassForm1DelegateSubDisplayMessage(ByValstrAsString)SubWriteToDebugWindow(ByValstrAsString)Debug.WriteLine(str)EndSubSubPopupMsg(ByValstrAsString)MsgBox(str)EndSubPrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickDimdeleAsDisplayMessagedele=NewDisplayMessage(AddressOfWriteToDebugWindow)dele.Invoke("ok")dele=NewDisplayMessage(AddressOfPopupMsg)dele.Invoke("ok")EndSubEndClass为什么可以呢,还是我理解错了呢?高手指点一下吧!!!
解决方案
解决方案二:
没这么细致研究过,是不是说方法参数一致的就可以啊?
解决方案三:
可以的呀,只要函数的参数和委托的参数一直就可以了,委托就是函数指针
解决方案四:
dele=NewDisplayMessage(AddressOfWriteToDebugWindow)dele=NewDisplayMessage(AddressOfPopupMsg)其实是在堆上分配了两个委托对象,一个对象指向WriteToDebugWindow,另一个指向PopupMsgDelegate变量dele得到的是你最后指定的委托对象
解决方案五:
委托是不可变类型,一旦创建之后,就无法使其指向另一个方法这个说法本身就是错误的,如果是不可变类型,那就无法做以下操作了:Delegate.CombineDelegate.Remove不过lz的例子和这个无关,ls已经做出了正确的解释
解决方案六:
收藏了,顶。
解决方案七:
学习学习~~~~~~~
解决方案八:
不会用VB.NET,给个C#版本的简单委托实例给你参考:usingSystem;usingSystem.Collections.Generic;usingSystem.Text;namespaceFirstDelegateExample{publicclassMathOpt{publicintAdd(intargument1,intargument2){returnargument1+argument2;}}publicdelegateintMathOptDelegate(intvalue1,intvalue2);classProgram{staticvoidMain(string[]args){MathOptDelegateoppDel;MathOptobj=newMathOpt();oppDel=obj.Add;Console.WriteLine(oppDel(1,2));//输出3//Console.ReadKey();}}}