2009-11-20 3 views
-3

Я пытаюсь наследовать класс Blah2, но после добавления метода он говорит, что BlahA не реализует этот метод.Наследование от класса, который наследуется от абстрактного класса

Как добавить метод к новому классу?

public class Blah2 : BlahA 
{ 

} 

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

    } 
} 

Примечание: BlahA является абстрактным классом.

Update

public abstract class BlahA : IBlah 
{ 

} 

Update II - ошибка

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

Какой метод не реализован? Как выглядит «BlahA»? Означает ли он какие-либо абстрактные методы? –

+1

Указанный код недостаточно. Это должно сработать. Перечислите больше кода, если это возможно, и ошибку, которую вы получаете. – BFree

+0

Как выглядит 'BlahA'? Вы объявили «Блаха» абстрактным? –

ответ

2

Wrting этот код и компиляции работает отлично

public abstract class BlahA 
    { 
    } 

    public class Blah2 : BlahA 
    { 
    } 

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

Нам потребуется немного больше кода, не работает

EDIT:

От комментариев вам необходимо реализовать метод из интерфейса в абстрактном классе.

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

Если он не хочет реализовывать метод интерфейса в абстрактном классе, ему это не нужно. Он может объявить его абстрактным. См. Мой пример кода. – BFree

3

Ну, если он реализует интерфейс, как вы писали в комментариях, то проблема в том, что ваш класс BLAHA не удовлетворяет требованиям интерфейса. В интерфейсе должен быть какой-то метод (я предполагаю его MyNewMethod), который вы не реализуете в своем абстрактном классе BlahA.

Если мое предположение верно, то добавьте в ваш базовый класс:

public abstract List<int> MyNewMethod();

и в вашем подклассе добавить слово переопределить в объявление метода.

Некоторый код:

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() { } 
    } 
Смежные вопросы