2012-10-17 35 views
12

W języku C# można przeciążać operatorów, np. + i *. W ich matematycznej interpretacji operatory te mają dobrze określoną kolejność pierwszeństwa.Przeciążanie i ważność operatora

Czy ta kolejność zachowuje się podczas przeciążania, zmienia się w pewien deterministyczny sposób, czy też można przeciążać kolejność pierwszeństwa?

Odpowiedz

15

W przypadku przeciążenia operatora zawsze będzie pierwszeństwo przed domyślną implementacją. Nie można jednak zmienić priorytetu samego operatora, więc będzie on zachowany jako domyślny. Więcej informacji na temat MSDN.

Istotne cytaty:

zdefiniowane przez użytkownika implementacje operator zawsze mają pierwszeństwo przed predefiniowanych implementacji operatora: Tylko wtedy, gdy nie istnieją żadne obowiązujące implementacje operator zdefiniowane przez użytkownika będą predefiniowane implementacje operator rozpatrywane.

i

zdefiniowane przez zgłoszeń operator nie może modyfikować składni pierwszeństwo lub zespolenie operatora. Na przykład operator/ jest zawsze operatorem binarnym, ma zawsze poziom priorytetu określony w Section 7.2.1 i zawsze jest skojarzony lewostronnie.

4

Przeciążenie nie zmienia priorytetu.

Priorytet operatorów jest ustawiony przez kompilator i nie można go zmienić, przynajmniej nie bez dostosowania kompilatora.

Powiązane problemy