标签: delegates

C#中的标准代表

在C#中有一些预定义的委托

我知道这些:

EventHandler // Default event callbacks
EventHandler<T> // Default event callbacks with custom parameter (inheriting from EventArgs)
Action // Function without return value and without parameter
Action<T1, T2, T3, T4> // Function without return value and 1-4 parameters
Func<T1, T2, T3, T4, TResult> // Methos with 0-4 parameters and one result type
Predicate<T> // equivalent to Func<T, bool>
Run Code Online (Sandbox Code Playgroud)

对于特殊情况和框架的生成表单部分还有更多,但这些通常很适合在自编代码中使用.

如果你知道一些更有用的添加它们.否则就回答了.

c# delegates list

42
推荐指数
2
解决办法
2万
查看次数

你如何声明内联的谓词代表?

我正在使用C#.

所以我有一个有一些领域的对象,并不重要.我有这些对象的通用列表.

List<MyObject> myObjects = new List<MyObject>();
myObjects.Add(myObject1);
myObjects.Add(myObject2);
myObjects.Add(myObject3);
Run Code Online (Sandbox Code Playgroud)

所以我想根据一些标准从列表中删除对象.例如,myObject.X >= 10. 我想使用该RemoveAll(Predicate<T> match)方法来执行此操作.

我知道我可以定义一个可以传递给RemoveAll的委托,但我想知道如何使用匿名委托定义这个内联,而不是创建一堆仅在一次使用的委托函数.

c# delegates

41
推荐指数
3
解决办法
3万
查看次数

数据源和委托之间有什么区别?

我有一个与Cocoa框架设计模式相关的基本问题.

委托和数据源之间有什么区别?

它们都可以使用@protocols声明,但是一些类或框架正在使用delegate,而另一些正在使用datasource.

我可以理解的UI/NSTableViewdelegate对UI相关事件的响应,而datasource与数据完全相关.但是,我不知道Cocoa的UI类之外的任何数据源实现.

注意:

  • 我在这个问题中提到的代表并不总是与UI事件有关.
  • 数据源问题已得到解答.

cocoa delegates datasource protocols

41
推荐指数
5
解决办法
4万
查看次数

如何描述返回值(非空)的Action <T>委托?

Action<T>委托返回void.是否有任何其他内置委托返回非空值?

.net c# delegates

41
推荐指数
2
解决办法
3万
查看次数

C#Events如何在幕后工作?

我正在使用C#,.NET 3.5.我理解如何利用事件,如何在我的班级中声明它们,如何将它们从其他地方挂钩等等.一个人为的例子:

public class MyList
{
    private List<string> m_Strings = new List<string>();
    public EventHandler<EventArgs> ElementAddedEvent;

    public void Add(string value)
    {
        m_Strings.Add(value);
        if (ElementAddedEvent != null)
            ElementAddedEvent(value, EventArgs.Empty);
    }
}

[TestClass]
public class TestMyList
{
    private bool m_Fired = false;

    [TestMethod]
    public void TestEvents()
    {
        MyList tmp = new MyList();
        tmp.ElementAddedEvent += new EventHandler<EventArgs>(Fired);
        tmp.Add("test");
        Assert.IsTrue(m_Fired);
    }

    private void Fired(object sender, EventArgs args)
    {
        m_Fired = true;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我明白的是,当一个人声明一个事件处理程序时

public EventHandler<EventArgs> ElementAddedEvent;
Run Code Online (Sandbox Code Playgroud)

它从未被初始化 - 所以,究竟是什么是ElementAddedEvent?它指向什么?以下操作无效,因为EventHandler永远不会被初始化:

[TestClass]
public class …
Run Code Online (Sandbox Code Playgroud)

c# events delegates .net-3.5

40
推荐指数
1
解决办法
2万
查看次数

new Action()和lambda有什么区别?

所以当我写这样的东西

Action action = new Action(()=>_myMessage = "hello");
Run Code Online (Sandbox Code Playgroud)

重构专业!强调这是一个冗余的代表创建,并允许我缩短它

Action action = () => _myMessage="hello";
Run Code Online (Sandbox Code Playgroud)

这通常很有效. 通常,但并非总是如此.例如,Rhino Mocks有一个名为Do的扩展方法:

IMethodOptions<T> Do(Delegate action);
Run Code Online (Sandbox Code Playgroud)

传递第一个版本,但第二个版本没有.究竟是什么在这里?

c# lambda delegates .net-3.5

40
推荐指数
2
解决办法
4万
查看次数

获取对UIApplication委托的引用

我正在编写我的第一个iPhone应用程序而且我无法切换视图.我有2个视图和每个(在AppDelegate一个实例中UIApplicationDelegate)的引用.我创建了两个实例applicationDidFinishLaunching并立即显示第一个视图.这很好用.

问题是在AppDelegate中引用另一个视图,我无法弄清楚如何获取它的引用,所以我可以切换到另一个视图.有没有办法获得对主要UIApplicationUIApplicationDelegate对象的引用?

iphone singleton delegates objective-c uiapplication

40
推荐指数
2
解决办法
3万
查看次数

如果事先无法知道方法签名,如何从MethodInfo创建委托?

我需要一个方法,该方法接受一个MethodInfo表示具有任意签名的非泛型静态方法的实例,并返回绑定到该方法的委托,该委托稍后可以使用Delegate.DynamicInvoke方法调用.我的第一次天真尝试看起来像这样:

using System;
using System.Reflection;

class Program
{
    static void Main()
    {
        var method = CreateDelegate(typeof (Console).GetMethod("WriteLine", new[] {typeof (string)}));
        method.DynamicInvoke("Hello world");
    }

    static Delegate CreateDelegate(MethodInfo method)
    {
        if (method == null)
        {
            throw new ArgumentNullException("method");
        }

        if (!method.IsStatic)
        {
            throw new ArgumentNullException("method", "The provided method is not static.");
        }

        if (method.ContainsGenericParameters)
        {
            throw new ArgumentException("The provided method contains unassigned generic type parameters.");
        }

        return method.CreateDelegate(typeof(Delegate)); // This does not work: System.ArgumentException: Type must derive from …
Run Code Online (Sandbox Code Playgroud)

.net c# reflection delegates methodinfo

40
推荐指数
1
解决办法
2万
查看次数

iOS8委托方法中的nil对象 - 自定义键盘

我正在构建一个自定义键盘,我正在我的实现以下委托方法InputViewController.
但我总是得到_textInput = nil_

- (void)textWillChange:(id<UITextInput>)textInput
- (void)textDidChange:(id<UITextInput>)textInput
- (void) selectionWillChange:(id<UITextInput>)textInput
- (void) selectionDidChange:(id<UITextInput>)textInput
Run Code Online (Sandbox Code Playgroud)

有人知道怎么解决吗?
这是nil有原因的吗?
我需要自己实施吗?

delegates ios ios8 ios-app-extension

40
推荐指数
1
解决办法
1217
查看次数

从事件中返回一个值 - 这是一个好的做法吗?

我正在做一个使用异步TCP套接字的小型多线程应用程序,但我会明白:我正在使用自定义事件从表单中读取值,并且事件使用的委托在完成时返回一个字符串.

我的问题是:这是正确的吗?可以从事件中返回值吗?或者有更好的方法吗?(比如使用表单的简单委托来读取值)

c# events multithreading delegates

39
推荐指数
6
解决办法
4万
查看次数