Programming Languages Hacks

Importanti regole per linguaggi di programmazione rilevanti come Java, C, C++, C#…

  • Subscribe

  • Lettori

    I miei lettori abituali

  • Twitter

Quando Implementare Interfacce Esplicitamente in C#

Posted by Ricibald on February 25th, 2008

C# consente di implementare esplicitamente interfacce. Secondo quando dichiarato da Microsoft, l’implementazione esplicita consente di evitare ambiguità provenienti da implementazioni di due classi aventi un metodo con la stessa signature. In realtà la potenzialità dell’approccio mi sembra un po’ sminuita:

L’implementazione esplicita di un membro di interfaccia consente di non inquinare la classe che implementa l’interfaccia con metodi che escono fuori dalla sua logica o che risultano poco utili per il client della classe

I due punti significano:

  • non inquinare interfaccia con metodi che risultano poco utili all’utilizzatore:
    • la classe “Studente” deve essere ordinabile per matricola. Per queso implementa IComparable. I metodi di IComparable verranno utilizzate nelle collezioni per ordinare, ma per chi utilizza la classe Studente (ad esempio “Segreteria“) non interessa avere un metodo “CompareTo“. Per questo conviene implementare esplicitamente l’interfaccia IComparable
  • non inquinare interfaccia con metodi che escono fuori dalla logica della classe:
    • in realtà è un caso particolare della prima, ma da trattare esplicitamente. Prendiamo il caso del design pattern Composite. L’interfaccia Component dovrebbe essere uniforme sia per oggetti Composite che per oggetti Leaf, ma i metodi addChild e removeChild non hanno senso per un oggetto Leaf. Ciò nonostante sono necessari per garantire un utilizzo generico della classe Component: un addChild in un Leaf non produrrà niente. L’utilizzo di Component è utile per gestire quindi oggetti compositi, ma per un client che utilizza Leaf risulta ambiguo vedere metodi addChild. Per questo è necessario implementare esplicitamente Component in Leaf, mentre in Composite dovrebbe essere implementata normalment

Leave a Reply

You must be logged in to post a comment.