で作業していない:共分散は、以下のクラスを考えると、一般的な辞書エントリ
public class ConcreteEmployeeRoleCreator<T, TConcrete, TSpec>
where TConcrete : class, T, new()
where T : EmployeeRole
where TSpec : EmployeeRoleSpecification
{
public ConcreteEmployeeRoleCreator(TSpec spec) { Specification = spec; }
public TSpec Specification { get; private set; }
public T Create() { return new TConcrete(); }
}
私は「クリエイター」の辞書を持っていると思いますが、私はまだそれを行う方法を考え出すことができませんでした。私が試してみて、最小公分母のタイプを使用して辞書を定義する場合、コンパイラは、「インスタンスがセールスマン
[Test] public void Creator_CanCreateFromSpec() { var creators = new Dictionary<string, ConcreteEmployeeRoleCreator<EmployeeRole, EmployeeRole, EmployeeRoleSpecification>>(); var spec = new SalesmanRoleSpecification(); var creator = new ConcreteEmployeeRoleCreator<EmployeeRole, Salesman, SalesmanRoleSpecification>(spec); creators.Add("salesman", creator); <==== ** compile error ** }
がEmployeeRoleで、SalesmanRoleSpecification がEmployeeRoleSpecificationである(または私はwouldn
を追加することができるようにされていませんコンパイラエラーもなく上記の作成者を定義することができます)。だから私は辞書を宣言していると思いますか?私は間違って何をしていますか?
しかし、どのコンパイラ実際には? – Tigran
分散は、インターフェイス、具体的な実装ではありません(ただしこれに限定されません)。 –
C#4.0またはC#4.0で改善しましたか? –