C#委托给Java转换

时间:2010-05-17 18:04:25

标签: c# java

我正在将一些代码从C#转换为Java。我之前从未使用过C#,但到目前为止它已经相当容易了。

我在C#文件中有一行看起来像这样:

 coverage.createMethod = delegate (Gridpoint gp){
 //Some method stuff in here, with a return objecct
 }

这究竟是做什么的?它似乎有点像内联类,但我不知道如何将htis转换为java

编辑:有关具体问题的更多信息

在名为STKDriver.java的文件中,我有以下内容

 CoverageDefinitionOnCentralBody coverage = new CoverageDefinitionOnCentralBody(...);
 .
 .
 .
 DClass value = new DClass(STKDriver.class, "invoke", CoverageGrid.class);
 coverage.setGridPointCreationMethod(value);

在填充DClass.java中,它扩展了CreateCoverageGridPointForAccess,我有以下内容:

 public DClass(Class class1, String string, Class<CoverageGridPoint> class2{}
 .
 .
 .
 public IServiceProvider invoke(CoverageGridPoint gridPoint){
    return something; //of the classtype Platform
 }

这样做是否正确?类定义在这里链接:

http://www.agi.com/resources/help/online/AGIComponentsJava/index.html?page=source%2FWhatsNewJava.html

请注意,CreateCoverageGridPointForAccess类是抽象的,并扩展了Delegate类。

我创建的这个实现看起来是否正确?如有必要,我可以写更多代码

3 个答案:

答案 0 :(得分:3)

这是C#中的匿名方法。它在技术上与以下相同:

coverage.createMethod = new Func<Gridpoint, object>(SampleMethod);

public object SampleMethod(Gridpoint gp)
{
    return thingy; // Pseudo for return value
}

这只是一个可以用来编码更少的快捷方式。

答案 1 :(得分:3)

Tejs的回答是正确的。但请注意,因为匿名函数可以使用闭包,这意味着使用外部函数中声明的现有局部变量,来自匿名委托。我不是Java程序员所以我不知道Java是否支持这个。

答案 2 :(得分:0)

coverage.createMethod是代表。

以下代码创建一个匿名方法并将其分配给委托:

coverage.createMethod = delegate (Gridpoint gb) {
}

这样当有人调用coverage.createMethod时,你的匿名方法就会被执行。