interfacce, implementazioni esplicite

di Marco Leoncini, in c#,
 uno dei grossi pregi delle intefacce è poter descrive cosa fa un oggetto (sia classe che struttura) senza specificarne il come.

prendiamo una semplice intefaccia

public interface IBasketItem

  {

  string Name{get;set;}

  decimal Price{get;set;}

  DateTime AddedDate{get;set;}

  }

se provate a mettere un qualsiasi modificatore d'accesso davanti al metodo riceverete (giustamente) un errore, a prima vista sembra che sia possibile solo definire menbri pubblici in un interfaccia, facciamo un esempio

public struct BasketItem : IBasketItem

  {

  ...

  private decimal price;

  ...

  public decimal Price

  {

  get { return price; }

  set 

  { 

  if(value < 0) throw new ArgumentException("Il prezzo deve essere maggiore 
  di 0");

  price = value;

  }

  }

  }

in questa implementazione se sostituite public con private riceverete un errore di menbro non implementato, se volte in qualche modo "nascondere" il membro Price dovrete ricorrere all'implementazione esplicita dell interfaccia.
dichiarare eplecitamente un interfaccia consiste nella qualificazione completa del suo nome

decimal IBasketItem.Price

  {

  get { return price; }

  set 

  { 

  if(value < 0) throw new ArgumentException("Il prezzo deve essere maggiore 
  di 0");

  price = value;

  }

  }

questo rende difatto inacessibile il mebro al difuori della struttura, e all'interno della stessa sarà possibile accedevi solamente tramite reference di interfaccia.

usare l'implementazione esplicta non solo è comodo per rendere inacessibile un menbro al difuri di una classe o struttura ma risolve le abiguità nel caso si implementino più interfacce che presentano nomi dei mebri uguali

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Nella stessa categoria
I più letti del mese