No estoy muy seguro de cómo título de esta pregunta, pero, básicamente, tengo una interfaz como esta:Diseño de herencia utilizando Interface + clase abstracta. ¿Buena práctica?
public interface IFoo
{
string ToCMD();
}
un par de clases que implementan absract IFoo como:
public abstract class Foo : IFoo
{
public abstract string ToCMD();
}
public abstract class Bar : IFoo
{
public abstract string ToCMD();
}
continuación, las clases que heredan foo y Bar:
public class FooClass1 : Foo
{
public override string ToCMD()
{return "Test";}
} ///there are about 10 foo classes.
public class BarClass : Bar
{
public override string ToCMD()
{return "BarClass";}
} ///about the same for bar classes.
que estoy haciendo esto para que cuando tenga mi lista personalizada como:
public class Store<T> : List<T> where T : IFoo {}
Luego puedo restringir los tipos que entran pero al tener la interfaz todavía tomará cualquier tipo de IFoo.
Algo así como:
Store<Foo> store = new Store<Foo>(); //Only Foo types will work.
store.Add(new FooClass1()); //Will compile.
Store<IFoo> store = new Store<IFoo>(); //All IFoo types will work.
store.Add(new FooClass1()); //Will compile.
store.Add(new BarClass()); //Will compile.
Mi pregunta es: ¿Es esta una forma aceptable de ir sobre esto? ¿O hay un mejor camino?
EDIT: Imagen->
No estaba seguro de que usar interfaces vacías fuera una buena idea. ¿Lo es? –
@ [Nathan W]: no tiene sentido en una interfaz vacía, creo que gcores estaba siendo sucinta –
Eso es lo que pensé, pero solo estaba revisando. –