【问题标题】:C# static function with this as parameter to Java function将 this 作为 Java 函数的参数的 C# 静态函数
【发布时间】:2013-05-29 15:24:23
【问题描述】:

我有一个需要重写为 java 的 C# 项目。不幸的是,无法联系到最初的程序员,我在项目中的一些 C# 特定的事情上遇到了一些麻烦。

假设我们在 C# 中有一个类,例如:

public static class MySampleClass : Object
{
  ...
  public static IEnumerable<MyObject> MyFunc(this MyObject t) {
   //a lot of code
  }
  ...
}

我不明白这个函数中参数前面的this。它指的是什么?我的意思是我们在一个静态类和一个静态函数中,那么“this”是什么?那么它只是对 t 的引用吗?

当然我的问题是这个函数头在 Java 中可以替代它:

public static Iterable<MyObject> MyFunc(MyObject t)

或者我还需要做其他事情吗?

感谢您的帮助

【问题讨论】:

标签: c# java


【解决方案1】:

在这种情况下,this 指的是MyObject 的任何实例。它叫extension method

扩展方法使您能够将方法“添加”到现有类型 无需创建新的派生类型、重新编译或以其他方式 修改原始类型。扩展方法是一种特殊的 静态方法,但它们被调用就好像它们是实例方法一样 扩展类型。

它定义了一个可用于MyObject 类实例的方法。 Java中没有这种东西,所以你必须把这个方法添加到MyObject类中。

【讨论】:

  • 所以基本上我不必做任何授予该函数实际上并没有以任何方式将“this”作为对象引用的事情,对吗?
  • 嗯,你可以删除this,它会起作用,但你必须删除myInstance.MyMethod,而不是MyClass.MyMethod(myInstance)
  • 您也可以将MyMethod 移动到MyClass,这样您就不必传递myInstance 参数。
  • 所以基本上有两种处理方式:转换为静态方法或移动到你的类。
【解决方案2】:

扩展方法,就像 walkhard 在他的回答中指出的那样,可以在任何地方声明,并且可以像在类中声明一样简单地调用。

这在 Java 中不存在。您必须将 MyFunc 添加到该 Java 类的声明中。

【讨论】:

    【解决方案3】:

    以这种方式使用this 使该方法成为extension method。 Java 没有等价物。在 C# 中,它是语法糖,可以让你做同样的事情:

    MySampleClass.MyFunc(myObject);
    

    使用此代码:

    myObject.MyFunc();
    

    (只要MySampleClass 的命名空间被导入并且MyObject 没有声明它自己的MyFunc() 方法,这些编译成相同的东西。)

    因为这在 Java 中不存在,你应该简单地将 myObject.MyFunc() 替换为 MySampleClass.MyFunc(myObject)

    【讨论】:

      【解决方案4】:

      这是一种扩展方法,它允许任何 MyObject 类型的对象公开 MyFunc 方法并将其用作普通的实例方法(但实际上它不是)它是普通的类方法

      MyObject o=new MyObject();
      //whitout extension method
      MyObject.MyFunc(o);
      //with extension
      o.MyFunc();
      

      这是一种语法糖,在 java 中不存在,因此如果您不想更改对 MyFunc 的所有调用或编写静态函数并修改对 MyObject 的每个调用,则必须修改类 MyObject 并添加实例方法 MyFunc .MyFunc(o);

      【讨论】:

        猜你喜欢
        • 2012-03-22
        • 1970-01-01
        • 1970-01-01
        • 2014-06-26
        • 1970-01-01
        • 2020-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多