======================================= Class method with single parameter ======================================= class A { private int GetBack(int b) { return b; } } --- (compilation_unit (class_declaration (identifier) (declaration_list (method_declaration (modifier) (predefined_type) (identifier) (parameter_list (parameter (predefined_type) (identifier))) (block (return_statement (identifier))))))) ======================================= Class method with multiple parameters ======================================= class A { void DoSomething(A a, B b) { } } --- (compilation_unit (class_declaration (identifier) (declaration_list (method_declaration (void_keyword) (identifier) (parameter_list (parameter (identifier) (identifier)) (parameter (identifier) (identifier))) (block))))) ======================================= Class generic method ======================================= class A { void Accept(T accept) { } } --- (compilation_unit (class_declaration (identifier) (declaration_list (method_declaration (void_keyword) (identifier) (type_parameter_list (type_parameter (identifier))) (parameter_list (parameter (identifier) (identifier))) (block))))) ======================================= Class generic method with new type constraint ======================================= class A { void Accept(T accept) where T: new() { } } --- (compilation_unit (class_declaration (identifier) (declaration_list (method_declaration (void_keyword) (identifier) (type_parameter_list (type_parameter (identifier))) (parameter_list (parameter (identifier) (identifier))) (type_parameter_constraints_clause (identifier) (type_parameter_constraint (constructor_constraint))) (block))))) ======================================= Class generic method with multiple type constraints ======================================= class A { void Accept(T1 accept, T2 from) where T1: new() where T2: T1, new() { } } --- (compilation_unit (class_declaration (identifier) (declaration_list (method_declaration (void_keyword) (identifier) (type_parameter_list (type_parameter (identifier)) (type_parameter (identifier))) (parameter_list (parameter (identifier) (identifier)) (parameter (identifier) (identifier))) (type_parameter_constraints_clause (identifier) (type_parameter_constraint (constructor_constraint))) (type_parameter_constraints_clause (identifier) (type_parameter_constraint (type_constraint (identifier))) (type_parameter_constraint (constructor_constraint))) (block))))) ======================================= Class method with out parameter ======================================= class A { void HasAnOut(out int a) { } } --- (compilation_unit (class_declaration (identifier) (declaration_list (method_declaration (void_keyword) (identifier) (parameter_list (parameter (parameter_modifier) (predefined_type) (identifier))) (block))))) ======================================= Class method with in parameter ======================================= class A { void HasAnOut(in int a) { } } --- (compilation_unit (class_declaration (identifier) (declaration_list (method_declaration (void_keyword) (identifier) (parameter_list (parameter (parameter_modifier) (predefined_type) (identifier))) (block))))) ======================================= Class method with ref parameter ======================================= class A { void HasAnOut(ref int a) { } } --- (compilation_unit (class_declaration (identifier) (declaration_list (method_declaration (void_keyword) (identifier) (parameter_list (parameter (parameter_modifier) (predefined_type) (identifier))) (block))))) ======================================= Class method with default parameter ======================================= class A { void HasAnOut(int a = 5) { } } --- (compilation_unit (class_declaration (identifier) (declaration_list (method_declaration (void_keyword) (identifier) (parameter_list (parameter (predefined_type) (identifier) (equals_value_clause (integer_literal)))) (block))))) ======================================= Class static method with single parameter ======================================= class A { static int GetBack(int b) { return b; } } --- (compilation_unit (class_declaration (identifier) (declaration_list (method_declaration (modifier) (predefined_type) (identifier) (parameter_list (parameter (predefined_type) (identifier))) (block (return_statement (identifier))))))) ======================================= Class method with explicit interface specifier ======================================= class A : ISomething { int ISomething.GetBack(int b) { return b; } } --- (compilation_unit (class_declaration (identifier) (base_list (identifier)) (declaration_list (method_declaration (predefined_type) (explicit_interface_specifier (identifier)) (identifier) (parameter_list (parameter (predefined_type) (identifier))) (block (return_statement (identifier))))))) ======================================= Class method with readonly method ======================================= class A { public readonly double Add => x + y; } --- (compilation_unit (class_declaration (identifier) (declaration_list (property_declaration (modifier) (modifier) (predefined_type) (identifier) (arrow_expression_clause (binary_expression (identifier) (identifier)))))))