3

我反编译了一个最初来自 J# 的 DLL。我看到原始代码中缺少以下属性:

[JavaFlags(0)]
public ToolBarButton toolBarButtonProg;

[JavaFlags(8)]
public static int lastClass;

我看到这些 JavaFlags 是在以下 J# 命名空间中定义的。

namespace com.ms.vjsharp.cor
{
  [AttributeUsage(AttributeTargets.All, AllowMultiple = false)]
  public class JavaFlags : Attribute
  {
    public int attr;

    public JavaFlags(int attr)
    {
      this.attr = attr;
    }
  }
}

但是这些属性的目的是什么?

4

1 回答 1

3

此属性可能由 J# 编译器添加以表示未在 CLR 中直接表示的 Java 构造。例如,CLR 中没有与protectedJava 中的修饰符完全相同的可见性修饰符,因此编译器在 CLR 中生成一个方法public以及一个[JavaFlags(4)]属性,因此 J# 编译器知道protected在编译其他 Java 代码时处理该方法。

于 2013-04-13T23:55:36.260 回答