2010-02-23 4 views
5

Possible en double:
Why must C# operator overloads be static?Pourquoi mot-clé statique avant la signature de la fonction

Pourquoi mot-clé statique avant la signature de la fonction de tous les opérateurs surchargées en C# comme:

public static opérateur vide = (Objet a, Objet b)

Lorsque nous sommes oing a = b; alors une valeur sera implicitement passée à droite. Donc, il n'y a pas besoin de mot-clé statique. Il doit être comme:

opérateur public void = (Object b)

est-il?

+0

Cet article pourrait apporter plus de lumière sur le sujet: http://stackoverflow.com/questions/2018108/why-must-c-operator-overloads-be-static/ –

Répondre

9

Le fait que les opérateurs soient statiques leur permet d'être utilisés dans des situations où il y a des valeurs nulles. Il souligne également le fait que les opérateurs sont et non appliqués de manière polymorphe. (Ils pourraient potentiellement être appliquées polymorphically si elles ne sont pas statiques, certes ... mais preponderants généralement une mauvaise idée de toute façon l'OMI.)

(Notez que vous ne pouvez pas surcharger l'opérateur d'affectation en C# de toute façon

+0

Notez que vous ne pouvez pas surcharger l'opérateur d'affectation en C# de toute façon Pourquoi? – Sunil

+0

@Sunil: Parce qu'il est méchant en termes de lisibilité et a des cas de coin mal, IIRC. Vous pouvez cependant fournir une conversion implicite, qui résoudra la plupart des cas où vous voudriez surcharger l'opérateur d'affectation. –

0

Sinon, vous auriez toujours besoin d'une instance de l'objet pour effectuer cela. Ce que vous pourriez ne pas avoir sur le cas a ou b est nul.

Questions connexes