Могу ли я опустить методы интерфейса в абстрактных классах в C #? - PullRequest
3 голосов
/ 03 марта 2010

Я разработчик Java, который пытается перейти на C #, и я пытаюсь найти хороший эквивалент некоторому коду Java. В Java я могу сделать это:

public interface MyInterface
{
    public void theMethod();
}

public abstract class MyAbstractClass implements MyInterface
{
    /* No interface implementation, because it's abstract */
}

public class MyClass extends MyAbstractClass
{
    public void theMethod()
    {
        /* Implement missing interface methods in this class. */
    }
}

Что бы C # эквивалентно этому? Кажется, что лучшие решения, использующие abstract / new / override и т. Д., Приводят к объявлению theMethod с телом той или иной формы в абстрактном классе. Как я могу удалить ссылку на этот метод в абстрактном классе, где он не принадлежит, и в то же время обеспечить реализацию в конкретном классе?

Ответы [ 2 ]

5 голосов
/ 03 марта 2010

Вы не можете, вам придется сделать это так:

public interface MyInterface 
{ 
    void theMethod(); 
} 

public abstract class MyAbstractClass : MyInterface 
{ 
     public abstract void theMethod();
} 

public class MyClass : MyAbstractClass 
{ 
    public override void theMethod() 
    { 
        /* Implement missing interface methods in this class. */ 
    } 
} 
2 голосов
/ 03 марта 2010

Нет, вам все еще нужно иметь сигнатуру метода в абстрактном классе, но реализовать ее в производном классе.

, например

public interface MyInterface
{
     void theMethod();
}

public abstract class MyAbstractClass: MyInterface
{
     public abstract void theMethod();
}

public class MyClass: MyAbstractClass
{
     public override void theMethod()
     {
          /* implementation */
     }
}
...