Company
異なるリストを保持するクラスがありIFactory<IPart>
ます。例えばEngineFactory
。
public class Company
{
private Dictionary<Type, IFactory<IPart>> _factories;
public Company()
{
_factories = new Dictionary<Type, IFactory<IPart>>();
_factories[typeof (Engine)] = new EngineFactory();
}
public void SendOrderIntakeToFactory(IPart part)
{
}
}
は次のEngineFactory
ようになります。
public class EngineFactory : IFactory<Engine>
{
public void Produce(Engine part)
{
}
}
そしてIFactory
インターフェース:
public interface IFactory<T> where T : IPart
{
void Produce(T part);
}
これにより、コンパイラ エラーが発生します。
タイプ 'EngineFactory' を 'IFactory' に暗黙的に変換することはできません。明示的な変換が存在します (キャストがありませんか?)
この行で:_factories[typeof (Engine)] = new EngineFactory();
分散を指定しないと、これは決して機能しません。out
したがって、ジェネリック型にキーワードを追加しようとしましたT
が、 as メソッド パラメーターを削除する必要があります (入力パラメーターとしてT
の使用が許可されていないため)。<out T>
public interface IFactory<out T> where T : IPart
{
void Produce(IPart part);
}
これは明らかに私の一般的な設計を破っています。で を生産できWheel
ますEngineFactory
。
この課題は、次の 2 つの要件にあることを理解しています。
- ファクトリを次のように保存します
IFactory<IPart>
void Produce(T part);
工場での一般的な実装の必要性。
これを達成する方法はありますか?