Как избежать пустой реализации в абстрактном классе при реализации интерфейса? - PullRequest
2 голосов
/ 28 мая 2010
public interface IMyInterface
{
   int A { get; set; } 
   string S { get; set; } 
}

public abstract class MyAbs : IMyInterface
{ }

public class ConcreteClass : MyAbs
{
   /* Implementation of IMyInterface*/
}

Можно ли опустить пустую реализацию в абстрактном классе, как указано выше? Если так, то как? почему?

Ответы [ 2 ]

2 голосов
/ 28 мая 2010

вы можете определить методы / свойства как абстрактные в абстрактном классе, чтобы у него не было пустой реализации

Код, который вы указали, не будет компилироваться

что вам нужно, это

    public interface IMyInterface
    {
        int A
        { get; set; }
        string S
        { get; set; }
    }
    public abstract class MyAbs : IMyInterface
    {
        public abstract int A { get; set; }
        public abstract string S { get; set; }
    }
    public class ConcreteClass : MyAbs
    {
        /* Implementation of IMyInterface*/
    }
0 голосов
/ 28 мая 2010

Целью абстрактного класса является инкапсуляция некоторого общего поведения, которое применяется ко всем производным классам. Если у вас ничего нет в вашем абстрактном классе, тогда нет смысла иметь это, ConcreteClass должен реализовать интерфейс напрямую.

Если впоследствии вы добавите еще один класс, который также реализует это поведение, то это время для рефакторинга и создания абстрактного базового класса, если это имеет смысл.

...