2

これは私が最近投稿した別のトピックに似ていますが、おそらくこちらの方が単純でわかりやすいかもしれません:

次のこと(または非常に似たもの)を達成したい...

IManageableEntryDao<IManageableEntry> dao = new CompanyNameDao(); 

...次のクラスで:

public interface IManageableEntry {
    string Name { get; set; }
}

public class CompanyName : IManageableEntry {
    public string Name { get; set; }
}

public interface IManageableEntryDao<T> where T : IManageableEntry {
}

public class CompanyNameDao : IManageableEntryDao<CompanyName> {
}

キャストを実行しようとするとas IManageableEntryDao<IManageableEntry>、null が返されます。

4

2 に答える 2

4

これが機能するには共分散が必要だと思います。この機能は、C# 4.0 でのみ使用できます。するべきこと:

public interface IManageableEntryDao<out T> where T : IManageableEntry { }
于 2012-06-08T22:54:08.067 に答える
2

ジェネリック インターフェイスの差異を参照してください。インターフェイスをに変更すると、動作IManageableEntryDao<out T>するはずです (インターフェイスがこれを無効にする方法で使用しない限り)。

于 2012-06-08T22:54:43.877 に答える