草庐IT

Delegate

全部标签

C# 事件处理(与 Java 相比)

我目前很难理解和使用委托(delegate)在C#中实现事件。我习惯了Java的做事方式:为监听器类型定义一个接口(interface),该接口(interface)将包含许多方法定义如果我对监听器中定义的所有事件不感兴趣,则为该接口(interface)定义适配器类可以使事情变得更容易在引发事件的类中定义Add、Remove和Get[]方法定义protectedfire方法来完成循环遍历添加的监听器列表并调用正确方法的脏活我理解(并且喜欢!)-我知道我可以在c#中完全相同地执行此操作,但似乎有一个新的(更好的?)系统适用于c#。在阅读了无数解释c#中委托(delegate)和事件使用

c# - 委托(delegate)可以有可选参数吗?

在我尝试添加boolNetworkAvailable=true部分之前,我的以下代码运行良好。现在我在下面的第4行得到了一个Methodnameexpected编译时异常。voidNetworkStatus_AvailabilityChanged(objectsender,NetworkStatusChangedArgse){varnetworkAvailable=e.IsAvailable;SetUpdateHUDConnectedModed=newSetUpdateHUDConnectedMode(UpdateHUDConnectedMode(networkAvailable));

c# - 可以在此通用代码中避免使用 Delegate.DynamicInvoke 吗?

这个问题部分是关于委托(delegate)的,部分是关于泛型的。给定简化代码:internalsealedclassTypeDispatchProcessor{privatereadonlyDictionary_actionByType=newDictionary();publicvoidRegisterProcedure(Actionaction){_actionByType[typeof(T)]=action;}publicvoidProcessItem(objectitem){Delegateaction;if(_actionByType.TryGetValue(item.Get

c# - lambda 函数是否比委托(delegate)/匿名函数更快?

我假设lambda函数、delegates和anonymousfunctions具有相同的主体将具有相同的“速度”,但是,运行以下简单程序:staticvoidMain(string[]args){Listitems=newList();Randomrandom=newRandom();for(inti=0;iresult;Func@delegate=delegate(inti){returnilambda=i=>ii我得到:Delegate:4.2948msLambda:0.0019msAnonymous:0.0034ms虽然可以忽略不计,但为什么这三种-显然相同-方法以不同的速度运

c# - 生成动态方法来设置结构的字段而不是使用反射

假设我有以下代码更新struct的字段使用反射。由于结构实例被复制到DynamicUpdate方法,itneedstobeboxedtoanobjectbeforebeingpassed.structPerson{publicintid;}classTest{staticvoidMain(){objectperson=RuntimeHelpers.GetObjectValue(newPerson());DynamicUpdate(person);Console.WriteLine(((Person)person).id);//print10}privatestaticvoidDynam

c# - 为什么 UserPrincipal.Enabled 返回不同的值?

我正在尝试确定是否启用了AD中的用户帐户。为此,我使用以下代码:stringdomain="mydomain";stringgroup="mysecuritygroup";stringou="myOU";//initcontextusing(varcnt=newPrincipalContext(ContextType.Domain,domain)){//findthenecessarysecuritygroupusing(GroupPrincipalmainGroup=GroupPrincipal.FindByIdentity(cnt,IdentityType.Guid,group))

c# - 使用反射创建通用委托(delegate)

我有以下代码:classProgram{staticvoidMain(string[]args){newProgram().Run();}publicvoidRun(){//worksFunc>static_delegate=newFunc>(SomeMethod);MethodInfomi=this.GetType().GetMethod("SomeMethod").MakeGenericMethod(newType[]{typeof(String)});//throwsArgumentException:ErrorbindingtotargetmethodFunc>reflecti

c# - 使用 Func<>(或 Action<>)或创建自己的委托(delegate)?

哪个更好,比如说,方法中的参数类型(与LINQ无关)。显然Func更好,因为它更简单,更具描述性,如果每个人都在使用它,一切都会变得兼容(好)。但是我注意到Microsoft在某些库中使用了自己的委托(delegate),例如事件处理程序。那么,它们各自的优点和缺点是什么?我应该什么时候使用它?编辑:显然Func仅在3.5中可用,因此这可能是我看到非Func委托(delegate)的主要原因。还有其他不使用Func的原因吗?(例如:this来自.NET4)同样的问题也适用于Action 最佳答案 Func在非常清楚它们的用途并且输入

C# Native Interop - 为什么大多数库使用 LoadLibrary 和委托(delegate)而不是 SetDllDirectory 和简单的 DllImport

有一个greatansweronSO关于如何在运行时为DllImport设置搜索目录。使用两行代码即可正常工作。但是,许多开源项目改为使用LoadLibrary函数。有“谣言”说通过委托(delegate)调用native方法速度较慢。我称它们为“谣言”,因为我只在两个地方看到过这种情况,而且无论如何这都是微观优化。最有意思的地方是这篇博文:http://ybeernet.blogspot.com/2011/03/techniques-of-calling-unmanaged-code.html在那里,作者测量了不同技术的性能:C#(信息性)4318毫秒PInvoke-抑制安全5415

c# - 如何声明返回相同类型的 Func Delegate 的 Func Delegate?

我想编写一个方法来完成一些工作并最终返回另一个与原始方法具有相同签名的方法。这个想法是根据前一个字节值顺序处理字节流,而不用递归。通过这样调用它:MyDelegateexecuteMethod=handleFirstByte//WhatformshouldbeMyDelegate?foreach(BytemyByteinBytes){executeMethod=executeMethod(myByte);//doesstuffonbyteandreturnsthemethodtohandlethefollowingbyte}为了移交方法,我想将它们分配给Func委托(delegate)