繁体   English   中英

C#解决伪代码以帮助理解委托人和lambda

[英]C# solving pseudocode to help understanding delegates&lambda

我在理解lambda,代表等方面遇到困难,我希望有人能给我解决我的问题的方法,使我能够更好地理解这些问题。 基本上,可以在初始化类的对象时创建(或更改)方法的主体 ,不是吗? 有点像这样:

假设我有1个类别:Class A,如下所示:

public class ClassA{
   int i;

   public ClassA(int number)
   {
   i = number;
   }

   public void Foo(){}
}

为了达到极简的演示目的,现在我在其他地方也有静态主体,我想要做的是:创建ClassA的多个对象并将其制成,以便在我调用ClassA.Foo时得到不同的结果,我可以确定自己的位置,在语法上看起来应该如何?

static void Main(string[] args)
{
    ClassA FooBlue = New ClassA(1){
                     public void Foo()
                     {
                     System.Console.WriteLine("I am a Fooranger Blue!");
                     };

    ClassA FooPink = New ClassA(2){
                     public void Foo()
                     {
                     System.Console.WriteLine("My  color is the manliest!");
                     };
    ...

所以现在当我这样做时:

    ...
    FooBlue.Foo();
    FooPink.Foo();
    System.Console.ReadLine();
}

我在控制台上得到以下输出:

"I am a Fooranger Blue!"
"My color is the manliest!"

我只是再次提到这是一个例子,绝不超出实践范围,但出于我的理解,如果有人能够提供给出所需解决方案的答案(包括无用的整数i),那就太好了。

为了实现“在构造类型时提供方法的实现”的目标,您确实可以使用委托。 在构造对象时只需接受一个委托,并在希望执行它时调用它:

public class ClassA
{
    private Action action;

    public ClassA(Action action)
    {
        this.action = action;
    }
    public void Foo()
    {
        action();
    }
}

lambda的语法与根据类的定义创建命名方法的语法不同:

var fooBlue = new ClassA(() => Console.WriteLine("I am a Fooranger Blue!"));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM