标签: delegates

作为委托的构造函数 - 它可能在C#中吗?

我有一个类如下:

class Foo
{
  public Foo(int x) { ... }
}
Run Code Online (Sandbox Code Playgroud)

我需要传递一个像这样的委托的方法:

delegate Foo FooGenerator(int x);
Run Code Online (Sandbox Code Playgroud)

是否可以直接将构造函数作为FooGenerator值传递,而无需键入:

delegate(int x) { return new Foo(x); }
Run Code Online (Sandbox Code Playgroud)

编辑:对于我个人使用,问题涉及.NET 2.0,但欢迎3.0 +的提示/响应.

c# constructor delegates

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

EndInvoke()是可选的,sort-of optional,还是绝对不是可选的?

我已经阅读了关于每个BeginInvoke()是否必须与EndInvoke()匹配的矛盾意见.是否有任何与调用EndInvoke()相关的泄漏或其他问题?

c# multithreading delegates

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

MethodInvoker与Control.BeginInvoke的Action

哪个更正确,为什么?

Control.BeginInvoke(new Action(DoSomething), null);

private void DoSomething()
{
    MessageBox.Show("What a great post");
}
Run Code Online (Sandbox Code Playgroud)

要么

Control.BeginInvoke((MethodInvoker) delegate { 
    MessageBox.Show("What a great post");
}); 
Run Code Online (Sandbox Code Playgroud)

我觉得我在做同样的事情,所以什么时候适合使用MethodInvokervs Action,甚至写一个lambda表达式?

编辑:我知道写一个lambda vs之间并没有什么区别Action,但MethodInvoker似乎是出于特定目的.它有什么不同吗?

.net c# delegates invoke

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

Why do we need C# delegates

I never seem to understand why we need delegates? I know they are immutable reference types that hold reference of a method but why can't we just call the method directly, instead of calling it via a delegate?

Thanks

c# delegates

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

@Delegate,@ Mixin和Groovy中的Traits之间的区别?

有人会解释我什么时候想要使用Groovy Traits vs. Mixins(@Mixin)与代表(@Delegate)?也许一些权衡和设计问题会有所帮助.

它们似乎都允许重复使用多个"类"行为.谢谢.:-)

这个SO线程也很有帮助:Groovy中@Delegate和@Mixin AST转换之间的区别

groovy delegates design-patterns traits mixins

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

检查是否已实现可选的协议方法

有谁知道检查是否已实施可选协议方法的最佳方法.

我试过这个:

if ([self.delegate respondsToSelector:@selector(optionalProtocolMethod:)] )
Run Code Online (Sandbox Code Playgroud)

代表是:

id<MyProtocol> delegate;
Run Code Online (Sandbox Code Playgroud)

但是,我收到一个错误,说respondsToSelector:该协议中找不到该功能!

iphone delegates protocols objective-c

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

为什么试图理解代表感觉想要了解宇宙的本质?

我读过两本书,很多例子.他们仍然对我毫无意义.我可能会写一些使用委托的代码,但我不知道为什么.我是唯一有这个问题的人,还是我只是个白痴?如果有人能够向我解释何时,何地以及为什么我会真正使用代表,我会永远爱你.

c# delegates

55
推荐指数
1
解决办法
7081
查看次数

代表们,为什么?

可能重复:
您何时在C#中使用委托?
代表们的目的

我看到很多关于代表使用的问题.我仍然不清楚你在哪里和为什么使用代理而不是直接调用方法.

我多次听过这个短语:"然后可以将委托对象传递给可以调用引用方法的代码,而不必在编译时知道将调用哪个方法."

我不明白这句话是怎么回事.

我写了以下例子.假设您有3个具有相同参数的方法:

   public int add(int x, int y)
    {
        int total;
        return total = x + y;
    }
    public int multiply(int x, int y)
    {
        int total;
        return total = x * y;
    }
    public int subtract(int x, int y)
    {
        int total;
        return total = x - y;
    }
Run Code Online (Sandbox Code Playgroud)

现在我宣布一个代表:

public delegate int Operations(int x, int y);
Run Code Online (Sandbox Code Playgroud)

现在我可以更进一步声明一个处理程序来使用这个委托(或你的委托直接)

致电代表:

MyClass f = new MyClass();

Operations p = new Operations(f.multiply);
p.Invoke(5, 5);
Run Code Online (Sandbox Code Playgroud)

或者使用处理程序调用

f.OperationsHandler = …
Run Code Online (Sandbox Code Playgroud)

c# delegates

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

协议和代表之间的区别?

a protocol和a有delegate什么区别?

和,

我们怎样才能声明variablesprotocol class

delegates protocols objective-c ios

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

在Typescript中声明委托类型

来自C#背景,我想创建一个定义函数签名的数据类型.在C#中,这是一个delegate声明如下:

delegate void Greeter (string message);

public class Foo
{
    public void SayHi (Greeter g) {
        g("Hi!");
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,我想在Typescript中实现类似的功能.我知道Typescript没有委托类型,但只有lambdas.我提出了这样的事情:

class Foo {
    SayHi (greeter: (msg: String) => void) {
        greeter('Hi!');
    }
}
Run Code Online (Sandbox Code Playgroud)

虽然这有效,但我想重复使用方法签名(msg:String) => void几次,并认为创建自定义类型会更清晰 - 就像C#中的委托一样.

有什么想法可以做到这一点?

c# lambda delegates types typescript

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