4
我有一個接口分配實現通用接口的一個屬性
public interface IStrategy<T> where T : BaseModel
{
T GetModel(Guid userId);
}
和具體的類繼承接口指定它應該是一個ConcreteModel
public class ConcreteStrategy: IStrategy<ConcreteModel>
{
ConcreteModel GetModel(Guid userId) { ... }
}
現在,在下面的方法我可以通過ConcreteStrategy
的新實例,一切正常
public class Manager
{
public TModel GetContentModel<TModel>(IStrategy<TModel> strategy, Guid userId)
where TModel : ModelBase
{
return strategy.GetContentModel(userId);
}
}
但如果我嘗試將其分配到這樣的屬性,我得到一個錯誤
public class Strategies
{
public static IStrategy<ModelBase> MyStrategy { get; set; }
}
Strategies.MyStrategy = new ConcreteStrategy();
有沒有一種方法,我可以在C#中實現這一目標? 我希望能夠製作一個工廠方法,它封裝了要使用的策略的邏輯,並且只返回某種策略類的實例(如ConcreteStrategy
)。
我得到的錯誤是:
無法隱式轉換類型IStrategy<ModelBase>
到IStrategy<ConcreteModel>