interfacce, implementazioni esplicite
 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

Nella stessa categoria

Commenti

Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.

© 1998-2008 - nostromo - Il blog di Marco Leoncini

TagCloud
BLOG INFO
  • Post: 222
  • Commenti: 88
  • TrackBacks: 17
  • Feed blog e contenuti tecnici: RSS
  • Feed blog: RSS Atom OPML

MVP
CATEGORIE
I PIÙ LETTI DEL MESE
IN EVIDENZA