采取方法System.Windows.Forms.Control.Invoke(委托方法) 为什么这给编译时间错误: string str = "woop"; Invoke(() => this.Text = str); // Error: Cannot convert lambda expression to type 'System.Delegate' // because it is not a delegate type 然而,这工作正常: string str = "woop"; Invoke((Action)(() => this.Text = str)); 当方法期望一个普通的代表?
我有以下代码: Func<string, bool> comparer = delegate(string value) { return value != "0"; }; 但是,下面不编译: var comparer = delegate(string value) { return value != "0"; }; 为什么编译器不知道它是一个Func<string, bool> ? 它接受一个string参数,并返回一个布尔值。 相反,它给了我错误: 无法将匿名方法分配给隐式types的本地variables。 我有一个猜测,那就是如果var版本编译 ,它会缺乏一致性,如果我有以下几点: var comparer = delegate(string arg1, string arg2, string arg3, string arg4, string arg5) { return false; }; 以上是没有意义的,因为Func <>只允许最多4个参数(在.NET 3.5中,这是我使用的)。 也许有人可以澄清这个问题。 谢谢。
我的应用程序是一个标签栏应用程序,每个标签都有一个单独的视图控制器。 我有一个对象在我的第一个视图控制器(A),其中包含我所有存储的应用程序数据(请忽略NSUserDefaults为此)需要由第二个视图控制器(B)访问时,我按下它的一个button。 我怎样才能以最好的方式做到这一点?
任何人都可以解释someViewController.delegate = self和self.delegate的含义? 他们在哪里帮助我们?
我正在与C#中的Action Delegates合作,希望能够更多地了解它们并思考它们可能的用处。 有没有人使用行动委托,如果是的话,为什么? 或者你能举出一些可能有用的例子吗?
我想知道为什么C#3.0编译器无法推断方法的types,当它作为parameter passing给generics函数时,它可以隐式地创build一个委托为同一个方法。 这里是一个例子: class Test { static void foo(int x) { } static void bar<T>(Action<T> f) { } static void test() { Action<int> f = foo; // I can do this bar(f); // and then do this bar(foo); // but this does not work } } 我会想,我将能够通过foo到bar并让编译器从被传递的函数的签名中推断出Action<T>的types,但是这不起作用。 不过,我可以从foo创build一个Action<int>而不需要转换,所以编译器不能通过types推断来做同样的事情吗?
重复: 如何确保一个事件只订阅一次,并已添加一个事件处理程序? 我有一个单身人士提供一些服务,我的类挂钩到它的一些事件,有时一个类挂钩两次事件,然后被调用两次。 我正在寻找一种经典的方法来防止这种情况发生。 不知何故,我需要检查,如果我已经迷上了这个事件…
我知道“C ++委托”这个话题已经被完成了,而且这两个方法都深深的涵盖了这个问题。 一般来说, 克鲁格斯顿(Don Clugston)最快的代表似乎是许多人的首选。 还有其他一些stream行的。 不过,我注意到这些文章中的大部分都是旧的(大约在2005年),许多deviseselect似乎都是考虑到像VC7这样的旧编译器。 我需要一个非常快速的委托实施audio应用程序。 我仍然需要它是可移植的(Windows,Mac,Linux),但我只使用现代编译器(VC9,在VS2008 SP1和GCC 4.5.x)。 我的主要标准是: 它一定是快! 它必须与新版本的编译器向前兼容。 我对唐的执行有一些怀疑,因为他明确指出它不符合标准。 可选地,KISS语法和易用性很好 多播将是很好,虽然我相信这是很容易围绕任何代表图书馆 而且,我并不需要奇特的function。 我只需要很好的旧的指针方法的东西。 无需支持静态方法,免费function或类似的东西。 到今天为止,推荐的方法是什么? 仍然使用唐的版本 ? 还是有关于另一种select的“社区共识”? 我真的不想使用Boost.signal / signal2,因为在性能方面它是不可接受的。 对QT的依赖也是不可接受的。 此外,我看到一些较新的图书馆,而谷歌search,如cpp事件,但我找不到任何来自用户的反馈,包括SO。
在C#中,这两行代码有什么区别(如果有的话)? tmrMain.Elapsed += new ElapsedEventHandler(tmrMain_Tick); 和 tmrMain.Elapsed += tmrMain_Tick; 两者似乎工作完全一样。 当你input后者时,C#是否假设你是指前者?
哪个更正确,为什么? Control.BeginInvoke(new Action(DoSomething), null); private void DoSomething() { MessageBox.Show("What a great post"); } 要么 Control.BeginInvoke((MethodInvoker) delegate { MessageBox.Show("What a great post"); }); 我觉得我正在做同样的事情,所以什么时候使用MethodInvoker vs Action ,甚至写一个lambdaexpression式? 编辑:我知道写一个lambda与Action之间并没有什么区别,但MethodInvoker似乎是为了一个特定的目的。 它做了什么不同吗?