我反编译了最初来自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;
    }
  }
}


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

最佳答案

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

关于c# - [JavaFlags]属性的含义是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15991705/

10-11 15:44