【问题标题】:Class Function within Parameter [duplicate]参数中的类函数[重复]
【发布时间】:2016-01-25 00:16:42
【问题描述】:

我可能在这里遇到了麻烦,而且我可能是,但是我的问题有点难以形容,所以我在寻求帮助时遇到了一些问题。


基本上,在 Java 中,您可以执行以下操作:

// create some generic class
public class Test {
   public void random() {}
}

// other class
public class Test2 {
   public Test2() {
      someFunction(new Test() {
         public void random() {
            System.out.println("howdy");
         }
      });
   }

   private someFunction(Test t) {
      t.random();
   }
}

我希望将这个想法(修改类的内容,同时将其作为变量传递)转换为 C#。我知道它可以用 lambda 表达式 来完成,但是我似乎一辈子都无法弄清楚。任何帮助表示赞赏。

【问题讨论】:

  • 你不能在 Java 中做这样的事情:对someFunction 的调用需要在一个方法中。尽管如此,您实际上是在询问哪一点“某事”:Test 类、Test2 类、匿名类、随机方法、someFunction 方法......?
  • 能够在调用方法时修改random()的内容。
  • 哪个是“方法”?以及如何修改这段代码中的“random() 内容”?
  • 在Test类中,random函数什么都不做。当我将一个 Test 实例传递给 someFunction() 时,我编辑了 random() 的内容。

标签: java c#


【解决方案1】:

我不能 100% 确定这是您想要实现的目标,但您可以这样做。将属性替换为Action delegate:

public class Test
{
    public Action random { get; set; }
}

并像这样使用:

var test = new Test 
{
    random = () => Console.WriteLine("Howdy")
};

test.random();

在这种情况下,委托用于不带参数且没有返回的方法。如果你想要参数,你可以使用Action 的通用版本。例如,如果您需要传递int

public Action<int> random { get; set; }

或者如果你想返回一个值,那么你必须使用Func&lt;&gt;

public Func<int> random { get; set; }

【讨论】:

  • 啊,太棒了。干杯,伙计。
  • 这是您要找的吗?
  • 是的,它完成了任务。
  • 如果你必须传递一个变量,并返回一个变量怎么办?
  • 然后仍然使用Func,但给它2个类型参数,例如:Func&lt;string, int&gt;
猜你喜欢
  • 2018-10-28
  • 2020-01-28
  • 2017-06-20
  • 1970-01-01
  • 2013-06-06
  • 2012-08-03
  • 2016-06-23
  • 2020-12-12
  • 2016-01-04
相关资源
最近更新 更多