草庐IT

delegating

全部标签

c# - 在没有标准 (Obj sender, EventArgs args) 签名的情况下创建事件处理程序委托(delegate)有多错误?

我了解使用标准MS事件处理程序委托(delegate)签名的好处,因为它允许您轻松扩展通过事件传递的信息,而不会破坏任何基于旧委托(delegate)签名的旧关系。我想知道在实践中人们多久遵守一次这条规则?假设我有一个像这样的简单事件publiceventNameChangedHandlerNameChanged;publicdelegatevoidNameChangedHandler(Objectsender,stringoldName,stringnewName);这是一个简单的事件,我几乎肯定我需要从NameChanged事件中知道的唯一参数是名称更改的对象、旧名称和新名称。那么

c# - C# 中类型安全的即发即弃异步委托(delegate)调用

我最近发现自己需要一种类型安全的“即发即弃”机制来异步运行代码。理想情况下,我想做的是:varmyAction=(Action)(()=>Console.WriteLine("yadayada"));myAction.FireAndForget();//asyncinvocation不幸的是,调用BeginInvoke()的明显选择没有相应的EndInvoke()不起作用-它会导致缓慢的资源泄漏(因为异步状态由运行时保持并且从未释放......它期待最终调用EndInvoke()。我也无法在.NET线程上运行代码池,因为它可能需要很长时间才能完成(建议只在线程池上运行相对较短生命周期的

c# - 应该使用委托(delegate)的一些常见场景是什么?

这个问题在这里已经有了答案:WheredoIusedelegates?[closed](8个答案)关闭9年前。我了解委托(delegate)和事件的工作原理。我也可以想象一些我们应该实现事件的常见场景,但我很难理解在什么情况下应该使用委托(delegate)。谢谢回复用户KVB的帖子:一)Youcanbasicallyusedelegateswhereveryouwouldotherwiseuseaone-methodinterface.我想我有点明白以下几点:C类可以定义方法C.M,它会将接口(interface)IM作为参数。该接口(interface)将定义一个方法IM.A,因此

c# - 如何在 C# 中为泛型委托(delegate)声明泛型事件

我有一个处理文件上传的用户控件。我定义了一个委托(delegate)如下publicdelegatevoidFileUploadSuccess(Tvalue,FileUploadTypeF)值可以是字符串也可以是字节数组。FileUploadType是一个枚举,它告诉上传的文件类型。现在我已经在用户控件中声明了一个事件来引发它。publiceventFileUploadSuccesssuccessString;//IncaseIwantafilenamepubliceventFileUploadSuccesssuccessStringImage;//IncaseIwantabyte[]

c# - C# 中是否有可用于属性的委托(delegate)?

给定以下类:classTestClass{publicvoidSetValue(intvalue){Value=value;}publicintValue{get;set;}}我可以TestClasstc=newTestClass();ActionsetAction=tc.SetValue;setAction.Invoke(12);这一切都很好。是否可以使用属性而不是方法来做同样的事情?最好在.net中内置一些东西。 最佳答案 您可以使用反射创建委托(delegate):ActionvalueSetter=(Action)Deleg

c# - 为什么所有委托(delegate)类型都彼此不兼容?

在C#中,所有委托(delegate)类型都彼此不兼容,即使它们具有相同的签名。例如:delegatevoidD1();delegatevoidD2();D1d1=MethodGroup;D2d2=d1;//compiletimeerrorD2d2=newD2(d1);//youneedtodothisinstead这种行为和语言设计决策背后的原因是什么。 最佳答案 InC#alldelegatetypesareincompatiblewithoneanother,eveniftheyhavethesamesignature.Wha

C#:虚函数调用甚至比委托(delegate)调用更快?

我刚好遇到一个代码设计问题。比如说,我有一个"template"方法可以调用一些可能“改变”的函数。一个直观的设计是遵循“模板设计模式”。将更改函数定义为要在子类中覆盖的“虚拟”函数。或者,我可以只使用没有“虚拟”的委托(delegate)函数。委托(delegate)函数被注入(inject),以便它们也可以被定制。最初,我认为第二种“委托(delegate)”方式会比“虚拟”方式更快,但一些代码片段证明它是不正确的。在下面的代码中,第一个DoSomething方法遵循“模板模式”。它调用虚方法IsTokenChar。第二种DoSomthing方法不依赖于虚函数。相反,它有一个传递委

c# - 无法将 lambda 表达式转换为类型 'System.Delegate' 因为它不是委托(delegate)类型?

这个问题在这里已经有了答案:Cannotconvertlambdaexpressiontotype'System.Delegate'(4个答案)关闭9年前。我遇到了一个我似乎无法弄清楚的问题,尽管这是Stackoverflow上的一个标准问题。我正在尝试使用以下代码异步更新我的Bingmap(请注意,这是来自旧的Silverlight项目并且似乎在WPF中不起作用)_map.Dispatcher.BeginInvoke(()=>{_map.Children.Clear();foreach(varprojectedPininpinsToAdd.Where(pin=>PointIsVisi

c# - 将 Google 云端硬盘访问权限委托(delegate)给服务帐户失败

我参与构建了一个内部使用的应用程序,用户可以通过该应用程序上传文件,并将其存储在Google云端硬盘中。由于建议不要将服务帐户用作文件所有者,我希望代表公司系统管理员有权访问的指定用户帐户上传应用程序。我已经创建了应用程序以及一个服务帐户。为服务帐户创建了两个key,因为我已尝试使用JSON和PKCS12格式来实现此目的:我已经下载了OAuth2.0客户端ID详细信息,还有服务帐户key的.json和.p12文件(按上面显示的顺序):我让我的系统管理员按照此处详述的步骤将DriveAPI访问权限委托(delegate)给服务帐户:https://developers.google.co

c# - 委托(delegate)操作 : new Action or casting Action?

我发现了两种不同的方法来使用Action初始化Delegate:创建一个新的Action或转换为Action。Delegatefoo=newAction(()=>DoNothing(param));Delegatebar=(Action)(()=>DoNothing(param));这两种语法有区别吗?哪个更好,为什么?此示例中使用了委托(delegate),因为语法对于使用lambda表达式调用BeginInvoke或Invoke等方法很有用,并且将lambda表达式转换为操作很重要staticmain{Invoke((Action)(()=>DoNothing()));//OKIn