2015-07-24 6 views
1

Я немного новичок в C#. Является ли следующая картина жизнеспособными или мне нужно переосмыслить вещи:Статический метод базового класса с использованием констант производного класса

public abstract class Foo{ 
    abstract const Format Format; 
    public static GetFormat(){ 
     return <Format configured by derived class> 
    } 
} 

public class JsonFoo:Foo{ 
    const Format Format = Format.JSON; 
} 

public class XmlFoo:Foo{ 
    const Format Format = Format.XML; 
} 

Я пытался разрешить это несколько способов купить я всегда работать, чтобы статики не может быть абстрактным/виртуальным и т.д.

(The код выше только для иллюстрации проблемы)

Edit:

Так я хочу, чтобы построить абстрактный базовый класс с большинством моей логики, а затем создать легкий вес производных классов. Все большинство операций идентичны, но с незначительными отличиями (например, с использованием другого формата (реальный случай - это доступ к различным DbSets в общем DbContext)).

Некоторые операции очень похожи (в контексте DbSet, найти объект по идентификатору, найти все ... и т.д.)

+0

Нет такой вещи, как абстрактный статический или абстрактный const. – Matt

+0

Я знаю, вот в чем проблема: P, Ищете способ решить проблему, поставленную выше или другой шаблон дизайна – SverkerSbrg

+0

Что вы пытаетесь достичь? Получают ли JsonFoo и XmlFoo собственную реализацию GetFormat()? – Matt

ответ

3

Вы сделали странное сооружение. Вы должны написать что-то вроде:

public enum Format{XML,JSON} 
public abstract class Foo 
{ 
    public abstract Format Format { get; } 
} 
public class JsonFoo : Foo 
{ 
    public override Format Format 
    { 
     get { return Format.JSON; } 
    } 
} 
public class XmlFoo : Foo 
{ 
    public override Format Format 
    { 
     get { return Format.XML; } 
    } 
} 
+2

Побей меня. Это полиморфизм хлеба и масла. –

+0

Вероятно, я сделал большую часть своего кодирования в python. Таким образом, ответ невозможен со статическими? – SverkerSbrg

+1

** Абсолютно невозможно ** со статическим или постоянным членом. –

Смежные вопросы