2009-11-20 12 views
-3

Je tente d'hériter d'une classe Blah2, mais après l'ajout d'une méthode, elle indique que BlahA n'implémente pas cette méthode.Héritage d'une classe héritant d'une classe abstraite

Comment puis-je ajouter une méthode à ma nouvelle classe?

public class Blah2 : BlahA 
{ 

} 

public class Blah3 : Blah2 
{ 
    public List<int> MyNewMethod() 
    { 

    } 
} 

Remarque: BlahA est une classe abstraite.

Mise à jour

public abstract class BlahA : IBlah 
{ 

} 

Mise à jour II - l'erreur

Error 3 'Blah.Components.BlahA' does not contain a definition for 'Blah3' and no extension method 'Blah3' accepting a first argument of type 'Blah.Components.BlahA' could be found (are you missing a using directive or an assembly reference?) 
+2

Quelle est la méthode pas été appliquées? À quoi ressemble «BlahA»? Est-ce qu'il déclare des méthodes abstraites? –

+1

Le code que vous avez fourni n'est pas suffisant. Cela devrait fonctionner. Liste plus de code si possible, et l'erreur que vous obtenez. – BFree

+0

À quoi ressemble «BlahA»? Avez-vous déclaré 'BlahA' comme abstrait? –

Répondre

2

wrting ce code et la compilation des œuvres fines

public abstract class BlahA 
    { 
    } 

    public class Blah2 : BlahA 
    { 
    } 

    public class Blah3 : Blah2 
    { 
     public List<int> MyList() 
     { 
      return new List<int>(); 
     } 
    } 

Nous aurons besoin d'un peu plus du code ne fonctionne pas

EDIT:

à partir des commentaires dont vous avez besoin pour implémenter la méthode à partir de l'interface dans la classe abstraite.

public interface IBlah 
    { 
     int GetVal(); 
    } 

    public abstract class BlahA : IBlah 
    { 
     public int GetVal() 
     { 
      return 1; 
     } 

    } 

    public class Blah2 : BlahA 
    { 
    } 

    public class Blah3 : Blah2 
    { 
     public List<int> MyList() 
     { 
      int i = GetVal(); 
      return new List<int>(); 
     } 
    } 
+0

S'il ne veut pas implémenter la méthode d'interface dans la classe abstraite, il n'a pas à le faire. Il peut le déclarer comme abstrait. Voir mon exemple de code. – BFree

3

Eh bien, si elle est mise en œuvre d'une interface que vous avez publié dans vos commentaires, le problème est que votre classe Blaha ne satisfait pas aux exigences de l'interface. Il doit y avoir une méthode dans l'interface (je suppose que c'est le MyNewMethod) que vous n'implémentez pas dans votre classe BlahA abstraite.

Si mon hypothèse est correcte, ajoutez à votre classe de base:

public abstract List<int> MyNewMethod();

et dans votre sous-classe, ajoutez le mot override à votre déclaration de méthode.

Certains code:

public interface MyInterface 
    { 
     void MyMethod(); 
    } 

    public abstract class Base : MyInterface 
    { 
     public abstract void MyMethod(); 
    } 

    public class SubA : Base 
    { 
     public override void MyMethod() 
     { 
      throw new NotImplementedException(); 
     } 
    } 

    public class SubB : SubA 
    { 
     public void Foo() { } 
    }