/// Each class file contains the definition of a single class or interface.
/// Although a class or interface need not have an external representation literally contained in a file (for instance, because the class is generated by a class loader), we will colloquially refer to any valid representation of a class or interface as being in the class file format.
/// <summary>A <see cref="ConstantPool"/> index is considered valid if it is greater than zero and less than <see cref="ConstantPoolCount"/>, with the exception for constants of type long and double noted in §4.4.5</summary>
/// <remarks>The value of the <see cref="ConstantPoolCount"/> item is equal to the number of entries in the <see cref="ConstantPool"/> table plus one</remarks>
/// The <see cref="ConstantPool"/> is a table of structures (§4.4) representing various string constants, class and interface names, field names, and other constants that are referred to within the ClassFile structure and its substructures.
/// The format of each <see cref="ConstantPool"/> table entry is indicated by its first "tag" byte.
/// </summary>
/// <remarks>The <see cref="ConstantPool"/> table is indexed from 1 to constant_pool_count-1</remarks>
/// <summary>The value of the access_flags item is a mask of flags used to denote access permissions to and properties of this class or interface</summary>
/// <summary>The <see cref="ClassFile.ConstantPool"/> entry at that index must be a <see cref="Jvm.CONSTANT_Class_info"/> structure (§4.4.1) representing the class or interface defined by this class file</summary>
/// <remarks>The value of the this_class item must be a valid index into the <see cref="ConstantPool"/> table</remarks>
/// For a class, the value of the super_class item either must be zero or must be a valid index into the <see cref="ConstantPool"/> table.
/// If the value of the super_class item is nonzero, the <see cref="ConstantPool"/> entry at that index must be a <see cref="Jvm.CONSTANT_Class_info"/> structure (§4.4.1) representing the direct superclass of the class defined by this class file. Neither the direct superclass nor any of its superclasses may have the ACC_FINAL flag set in the access_flags item of its ClassFile structure.
///
/// If the value of the super_class item is zero, then this class file must represent the class Object, the only class or interface without a direct superclass.
/// For an interface, the value of the super_class item must always be a valid index into the <see cref="ConstantPool"/> table.
/// The <see cref="ConstantPool"/> entry at that index must be a <see cref="Jvm.CONSTANT_Class_info"/> structure representing the class Object.
/// <summary>The <see cref="ClassFile.ConstantPool"/> entry at each value of interfaces[i], where 0 ≤ i < interfaces_count, must be a <see cref="Jvm.CONSTANT_Class_info"/> structure (§4.4.1) representing an interface that is a direct superinterface of this class or interface type, in the left-to-right order given in the source for the type</summary>
/// <remarks>Each value in the interfaces array must be a valid index into the <see cref="ClassFile.ConstantPool"/> table</remarks>
publicClassRow[]Interfaces{get;privateset;}
/// <summary>
/// Each value in the fields table must be a field_info (§4.5) structure giving a complete description of a field in this class or interface.
/// The fields table includes only those fields that are declared by this class or interface.
/// It does not include items representing fields that are inherited from superclasses or superinterfaces.
/// </summary>
publicField_Info[]Fields{get;privateset;}
/// <summary>
/// Each value in the methods table must be a method_info (§4.6) structure giving a complete description of a method in this class or interface.
/// If neither of the ACC_NATIVE and ACC_ABSTRACT flags are set in the access_flags item of a method_info structure, the Java Virtual Machine instructions implementing the method are also supplied.
/// </summary>
/// <remarks>
/// The method_info structures represent all methods declared by this class or interface type, including instance methods, class methods, instance initialization methods (§2.9), and any class or interface initialization method (§2.9).
/// The methods table does not include items representing methods that are inherited from superclasses or superinterfaces.
/// </remarks>
publicMethodInfo[]Methods{get;privateset;}
/// <summary>Each value of the attributes table must be an attribute_info (§4.7) structure.</summary>
/// <remarks>
/// The attributes defined by this specification as appearing in the attributes table of a ClassFile structure are the InnerClasses (§4.7.6), EnclosingMethod (§4.7.7), Synthetic (§4.7.8), Signature (§4.7.9), SourceFile (§4.7.10), SourceDebugExtension (§4.7.11), Deprecated (§4.7.15), RuntimeVisibleAnnotations (§4.7.16), RuntimeInvisibleAnnotations (§4.7.17), and BootstrapMethods (§4.7.21) attributes.
/// If a Java Virtual Machine implementation recognizes class files whose version number is 49.0 or above, it must recognize and correctly read Signature (§4.7.9), RuntimeVisibleAnnotations (§4.7.16), and RuntimeInvisibleAnnotations (§4.7.17) attributes found in the attributes table of a ClassFile structure of a class file whose version number is 49.0 or above.
/// If a Java Virtual Machine implementation recognizes class files whose version number is 51.0 or above, it must recognize and correctly read BootstrapMethods (§4.7.21) attributes found in the attributes table of a ClassFile structure of a class file whose version number is 51.0 or above.
/// A Java Virtual Machine implementation is required to silently ignore any or all attributes in the attributes table of a ClassFile structure that it does not recognize. Attributes not defined in this specification are not allowed to affect the semantics of the class file, but only to provide additional descriptive information (§4.7.1).