Classi abstract e interfacce

Oggi sul forum di ASP.NET ho risposto ad un post che mi è sembrato interessante, ed ho deciso di riproporlo come post.

Ho una classe di base abstract B1 e un inrefaccia I1. Creo un'altra classe abstract B2 che eredita da B1 ed implementa I1. Infine ho due classi D1 e D2 che ereditano da B2. Dichiarando un metodo in I1 e volendolo implementare solo in D1 e D2, come posso fare?

Se proviamo a dichiarare il metodo dentro D1 e D2 il compilatore genera un errore per B2 perchè non implementa il metodo dell'interfaccia. Per risolvere il problema basta dichiarare il metodo in B2 come abstract e lasciare l'implementazione del corpo del metodo alle classi D1 e D2.

Un po' di codice:

public abstract classB1

{

 public abstract void mB1(); 

}

public interface I1
{
     void mI1();
}
public abstract class B2:B1,I1        
{
      public abstract void mI1(); 
}
public class D1:B2
{
          publicoverridevoid mI1(){}         
          publicoverridevoid mB1(){}
}

 

posted @ venerdì 25 aprile 2008 02:04

Print
«dicembre»
domlunmarmergiovensab
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234