[javaflag]属性的含义是什么?



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

[JavaFlags(0)]
public ToolBarButton toolBarButtonProg;
[JavaFlags(8)]
public static int lastClass;

我看到这些javaflag是在以下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;
    }
  }
}

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

这个属性很可能是由j#编译器添加的,用来表示在CLR中没有直接表示的Java结构。例如,在CLR中没有可见性修饰符,它完全反映了Java中的protected修饰符,因此编译器在CLR中产生一个public方法以及[JavaFlags(4)]属性,因此j#编译器知道在编译其他Java代码时将该方法视为protected

最新更新