======================================= Class field declarations ======================================= class A { public readonly int _B; Int64 D_e_f, g; Tuple> z; } --- (compilation_unit (class_declaration (identifier) (declaration_list (field_declaration (modifier) (modifier) (variable_declaration (predefined_type) (variable_declarator (identifier)))) (field_declaration (variable_declaration (identifier) (variable_declarator (identifier)) (variable_declarator (identifier)))) (field_declaration (variable_declaration (generic_name (identifier) (type_argument_list (predefined_type) (generic_name (identifier) (type_argument_list (predefined_type))))) (variable_declarator (identifier))))))) ======================================= Struct field declarations ======================================= struct A { private readonly int c_; } --- (compilation_unit (struct_declaration (identifier) (declaration_list (field_declaration (modifier) (modifier) (variable_declaration (predefined_type) (variable_declarator (identifier))))))) ======================================= Class field nullable type ======================================= class A { public readonly int? i; private Byte? b; } --- (compilation_unit (class_declaration (identifier) (declaration_list (field_declaration (modifier) (modifier) (variable_declaration (nullable_type (predefined_type)) (variable_declarator (identifier)))) (field_declaration (modifier) (variable_declaration (nullable_type (identifier)) (variable_declarator (identifier))))))) ======================================= Class field pointer type ======================================= class A { public readonly int* i; private Byte* b; } --- (compilation_unit (class_declaration (identifier) (declaration_list (field_declaration (modifier) (modifier) (variable_declaration (pointer_type (predefined_type)) (variable_declarator (identifier)))) (field_declaration (modifier) (variable_declaration (pointer_type (identifier)) (variable_declarator (identifier))))))) ======================================= Ref readonly ======================================= class A { ref readonly Point Origin => ref origin; } --- (compilation_unit (class_declaration (identifier) (declaration_list (property_declaration (modifier) (modifier) (identifier) (identifier) (arrow_expression_clause (ref_expression (identifier))))))) ======================================= Nullable reference types ======================================= class A { string? a; A? a; } --- (compilation_unit (class_declaration (identifier) (declaration_list (field_declaration (variable_declaration (nullable_type (predefined_type)) (variable_declarator (identifier)))) (field_declaration (variable_declaration (nullable_type (identifier)) (variable_declarator (identifier))))))) ======================================= Tuple types ======================================= class A { (int, string str) a; (B b, C c, D d) a; } --- (compilation_unit (class_declaration (identifier) (declaration_list (field_declaration (variable_declaration (tuple_type (tuple_element (predefined_type)) (tuple_element (predefined_type) (identifier))) (variable_declarator (identifier)))) (field_declaration (variable_declaration (tuple_type (tuple_element (identifier) (identifier)) (tuple_element (identifier) (identifier)) (tuple_element (identifier) (identifier))) (variable_declarator (identifier)))))))