Tag: 委托

如何以正确的方式使用委托/了解委托

使用 – C#(。Net Framework 4.5,Visual Studio 2012) 我试着理解像代表这样的主题,目前我有几点,必须为我澄清。 我在互联网上发现了很多不同的信息来描述如何使用它,但是对我来说理解这个主题有点复杂。 据我所知,我必须做一些使用委托的事情: 创建一些实体用于它(需要创建一些委托) 声明委托类型 创建一些我调用委托的方法 在主类调用委托与使用实体的必需方法(从第一点) 所有描述如下所示 问题 – 我是否正确理解了所有或者我错了 – 请澄清一下。 另外一个关于DELEGATE的问题 – 在哪里更好地将代码与DELEGATE放在一起 – 在Console C#应用程序中我可以在任何使用过的命名空间的地方创建它 – 我可以在下面看到。 但也许有一些建议/要求不仅为控制台应用程序而且为WinForms,WPF等放置委托。 这个主题对我来说是新的,我花了一天时间来理解它,但仍然有点(或更多)与此混淆,最后创建这篇文章以获得更好和清晰的理解。 认为这是非常强大的东西。 编辑 namespace SimpleCSharpApp { delegate void myDelagate (); }

是否有一个委托,它不是C#中的MulticastDelegate?

我觉得答案是否定的? 如果没有,为什么我们将Delegate和MulticastDelegate类分开? 也许是因为“其他一些.NET语言”?

我应该实例化一个新的代表吗?

我刚刚意识到我可以通过两种方式添加事件处理程序: 考虑像这样的事件处理程序: private void MyEventHandler() {} 方法1:实例化新委托 MyObject.MyEvent += new Action(MyEventHandler); 方法2:添加事件处理程序而不实例化新委托 MyObject.MyEvent += MyEventHandler; 应该考虑这两种实现之间有什么区别吗?

配置在抽象类上定义的Autofac委托工厂

我正在研究一个C#项目。 我正在尝试摆脱具有大型switch语句的Factory类。 我想配置Autofac以便能够基于参数构造依赖关系,从而允许Autofac取代Factory。 我查看了Autofac wiki的DelegateFactories页面 ,但我无法弄清楚如何将模式应用于抽象类。 以下是一些显示情况的代码: public enum WidgetType { Sprocket, Whizbang } public class SprocketWidget : Widget { } public class WhizbangWidget : Widget { } public abstract class Widget { public delegate Widget Factory(WidgetType widgetType); } public class WidgetWrangler { public Widget Widget { get; private set; } public WidgetWrangler(IComponentContext context, WidgetType […]

我可以访问内部类中的外部类对象

我有三个这样的课程。 class A { public class innerB { //Do something } public class innerC { //trying to access objB here directly or indirectly over here. //I dont have to create an object of innerB, but to access the object created by A //ie innerB objInnerB = objB; //not like this innerB objInnerB= new innerB(); } […]

C#跨线程调用问题

我正在用c#编写一个表单应用程序,我需要能够从任何线程更改Rich Text Box的内容,我尝试使用委托和InvokeRequired ,但我做的委托仍然给我一个跨线程调用错误,和InvokeRequired崩溃表单,而不会给出错误。 函数我需要能够从任何线程执行: public static void updateSub(int what) { subDisplay.subBox.Text = tb[what]; } 我试图使用的代表: public delegate void UpdateDelegateVoid(int what); static public UpdateDelegateVoid uSub = new UpdateDelegateVoid(updateSub); uSub(0); 我的InvokeRequired代码: public static void updateSub(int what) { if (subDisplay.subBox.InvokeRequired) { subDisplay.subBox.Invoke(new MethodInvoker(finish)); } else { subDisplay.subBox.Text = tb[what]; } } 我不确定为什么上面的代码不起作用。 谢谢!

如何使用委托和事件处理程序进行用户控制

我创建了一个包含按钮的用户控件。 我在我的winform上使用这个控件,它将在从数据库中获取数据后在运行时加载。 现在我需要从该按钮的Click事件中的数据表中删除一行。 问题是我如何在表单中捕获该事件。 目前它进入用户控件的btn点击事件定义。

委托方法与一般方法

我想知道使用委托方法和使用常规方法[无代表]之间的区别。 例如 : 有代表: delegate void DelMethod(string str); static void Method(string str) { Debug.WriteLine(str); } 用法: DelMethod dm = new DelMethod(Method); dm(string); 没有代表: static void Method(string str) { Debug.WriteLine(str); } 用法: Method(string) 这两个有什么不同? 没有委托的方法更小更容易。 但我发现编码人员经常使用委托方法。 这背后的原因是什么?

如何从lambda表达式获取引用实例的实例

我有这个lambda表达式Expression<Func> commandToExecute 然后我用一个方法传递一个类的实例: _commandExecuter.ProcessCommand (() => aClass.Method()) 如何在ProcessCommand方法中获取aClass的实例? 我想执行此类的一些addiontal方法或获取一些属性值。 这可能吗? 编辑:我现在已经编写了一个简单的静态助手方法来获取实例: private static object GetReferredProviderInstance(Expression body) { var methodCallExpression = body as MethodCallExpression; if (methodCallExpression != null) { var constantExpression = methodCallExpression.Object as ConstantExpression; if (constantExpression != null) return constantExpression.Value; } return null; } 方法调用看起来像这样…… Expression body = commandToExecute.Body; // this is the method parameter […]

使用参数名称动态创建委托

嗨,我正在尝试创建一个动态创建一个委托的函数,该委托具有相同的返回值和与它作为参数接收的MethodInfo相同的参数,这也是相同的参数名称非常重要! 到目前为止我所做的是创建一个函数,该函数返回一个lambda,它接收相同的参数类型,并且具有与MethodInfo相同的返回值,但它没有参数名称: static void Example() { Person adam = new Person(); MethodInfo method = typeof(Person).GetMethod(“Jump”); Delegate result = CreateDelegate(adam, method); result.DynamicInvoke((uint)4, “Yeahaa”); } private static Delegate CreateDelegate(object instance, MethodInfo method) { var parametersInfo = method.GetParameters(); Expression[] expArgs = new Expression[parametersInfo.Length]; List lstParamExpressions = new List(); for (int i = 0; i < expArgs.Length; i++) { […]