Пусть говорят, у меня есть этот кусок кодаC# создать интерфейс для общего класса с обобщенными методами
public interface IFoo
{
}
public abstract class FooBase<TModel> : IFoo
{
public T Create<T>() where T : TModel;
}
public class Foo : FooBase<ModelBase>
{
public TModel Create<TModel>()
{
return Activator.CreateInstance(typeof(TModel));
}
}
public abstract class ModelBase
{
}
public class ModelFoo : ModelBase
{
}
public class ModelBar : ModelBase
{
}
Теперь у меня есть этот класс
public static FooProvider
{
public IFoo Get<TModel>()
{
var provider = ...; // find which IFoo class has generic TModel
return provider;
}
}
И я могу управлять, чтобы позвонить это с
IFoo provider = FooProvider.Get<ModelBar>(); // -> instance of Foo
Но я получаю экземпляр IFoo
, следовательно, не имеют доступа к FooBase
методов. Можно ли реализовать IFoo
(или абстрактный абстрактный класс), чтобы предоставить декларацию метода, которая может быть вызвана без (обязательно) литья возвращаемого значения provider
?
В идеале, я хотел бы быть в состоянии сделать
ModelBar bar = FooProvider.Get<ModelBar>().Create<ModelBar>();
Возможно ли это?
Что о возвращении '' FooBase вместо 'IFoo'? –
Jon
Потому что мне нужно вернуть 'FooBase' при вызове 'Get '. Как вы можете видеть, 'TModel' является' ModelBar', а не 'ModelBase', и я не могу использовать' Foo' в 'FooBase ' –