======================================= Operator declarations ======================================= class A { [SomeAttribute] public static int operator +(A a) { return 0; } public static int operator +(A a, A b) { return 0; } int operator -(A a) { return 0; } } --- (compilation_unit (class_declaration (identifier) (declaration_list (operator_declaration (attribute_list (attribute (identifier))) (modifier) (modifier) (predefined_type) (parameter_list (parameter (identifier) (identifier))) (block (return_statement (integer_literal)))) (operator_declaration (modifier) (modifier) (predefined_type) (parameter_list (parameter (identifier) (identifier)) (parameter (identifier) (identifier))) (block (return_statement (integer_literal)))) (operator_declaration (predefined_type) (parameter_list (parameter (identifier) (identifier))) (block (return_statement (integer_literal))))))) ======================================= boolean operator declarations ======================================= class A { public static bool operator true(A a) { return true; } bool operator false(A a) { return false; } } --- (compilation_unit (class_declaration (identifier) (declaration_list (operator_declaration (modifier) (modifier) (predefined_type) (parameter_list (parameter (identifier) (identifier))) (block (return_statement (boolean_literal)))) (operator_declaration (predefined_type) (parameter_list (parameter (identifier) (identifier))) (block (return_statement (boolean_literal))))))) ======================================= conversion operator declaration ======================================= class A { public static implicit operator int (A a) { return 0; } explicit operator int (A a) { return 0; } } --- (compilation_unit (class_declaration (identifier) (declaration_list (conversion_operator_declaration (modifier) (modifier) (predefined_type) (parameter_list (parameter (identifier) (identifier))) (block (return_statement (integer_literal)))) (conversion_operator_declaration (predefined_type) (parameter_list (parameter (identifier) (identifier))) (block (return_statement (integer_literal))))))) ======================================= conversion operator with expression body ======================================= class A { public static implicit operator int (A a) => 0; } --- (compilation_unit (class_declaration (identifier) (declaration_list (conversion_operator_declaration (modifier) (modifier) (predefined_type) (parameter_list (parameter (identifier) (identifier))) (arrow_expression_clause (integer_literal)))))) ======================================= extern operators ======================================= class A { public static extern int operator + (A a); public static extern bool operator <(A a, A b); public static explicit operator int (A a); } --- (compilation_unit (class_declaration (identifier) (declaration_list (operator_declaration (modifier) (modifier) (modifier) (predefined_type) (parameter_list (parameter (identifier) (identifier)))) (operator_declaration (modifier) (modifier) (modifier) (predefined_type) (parameter_list (parameter (identifier) (identifier)) (parameter (identifier) (identifier)))) (conversion_operator_declaration (modifier) (modifier) (predefined_type) (parameter_list (parameter (identifier) (identifier))))))) ======================================= Class conversion operators with expression body ======================================= class A { public static extern int operator + (A a) => 0; public static extern bool operator <(A a, A b) => true; public static explicit operator int (A a) => 0; } --- (compilation_unit (class_declaration (identifier) (declaration_list (operator_declaration (modifier) (modifier) (modifier) (predefined_type) (parameter_list (parameter (identifier) (identifier))) (arrow_expression_clause (integer_literal))) (operator_declaration (modifier) (modifier) (modifier) (predefined_type) (parameter_list (parameter (identifier) (identifier)) (parameter (identifier) (identifier))) (arrow_expression_clause (boolean_literal))) (conversion_operator_declaration (modifier) (modifier) (predefined_type) (parameter_list (parameter (identifier) (identifier))) (arrow_expression_clause (integer_literal))))))