covariance

    5热度

    2回答

    我不明白为什么'x'低于转换,但是'y'和'z'不是。 var list = new List<List<int>>(); IEnumerable<List<int>> x = list; List<IEnumerable<int>> y = list; IEnumerable<IEnumerable<int>> z = list; 新的协方差特征是否不适用泛型的泛型或我做错了什么?

    19热度

    3回答

    using namespace boost; class A {}; class B : public A {}; class X { virtual shared_ptr<A> foo(); }; class Y : public X { virtual shared_ptr<B> foo(); }; 返回类型不是协变的(它们也不合法),但是如果我使用原

    2热度

    1回答

    我有一些使用LINQ-to-SQL创建的实体。其中六个实体(代表主要在下拉列表中的值)实现了一个我称为IValue的接口。我这样做是因为UI层必须考虑几个特殊情况 - 尤其是,如果记录中的原始值已被标记为已删除,将显示什么内容。 存储库有这些家伙的各种ListAllXXX方法。所有这些都返回类型为适当实体类型的泛型列表。举个例子: public static List<ContactType> L

    13热度

    1回答

    已经定义了这个接口: public interface IInputBoxService<out T> { bool ShowDialog(); T Result { get; } } 为什么下面的代码工作: public class StringInputBoxService : IInputBoxService<string> { ... } ...

    8热度

    2回答

    当我们在C#4.0中定义接口时,我们可以将每个通用参数标记为in或out。如果我们试图设置一个泛型参数并导致问题,编译器会提出一个错误,而不允许我们这样做。 问: 如果编译器推断的方法有哪些两个covariance(out)和contravariance(in)有效的用途,为什么我们必须标记接口,这样的?仅仅让我们像往常一样定义接口是不够的,当我们试图在我们的客户代码中使用它们时,如果我们试图以不

    1热度

    2回答

    这里是我面对的情景: public abstract class Record { } public abstract class TableRecord : Record { } public abstract class LookupTableRecord : TableRecord { } public sealed class UserRecord : LookupTableR

    3热度

    2回答

    假设我有动物的一个小的继承层次: public interface IAnimal { string Speak(); } public class Animal : IAnimal { public Animal() {} public string Speak() { return "[Animal] Growl!"; } } p

    12热度

    3回答

    下面的代码无法编译(使用VS2010),我不明白为什么。编译器应该能够推断List<TestClass>与IEnumerable<ITest>是“兼容的”(对不起,因为缺少一个更好的词),但不知何故它没有。我在这里错过了什么? interface ITest { void Test(); } class TestClass : ITest { public void T

    4热度

    1回答

    有没有办法在接口上反映检测其泛型类型参数和返回类型的变化?换句话说,我可以使用反射来区分两个接口: interface IVariant<out R, in A> { R DoSomething(A arg); } interface IInvariant<R, A> { R DoSomething(A arg); } 两者的IL看起来相同。

    11热度

    2回答

    (我检查了这一点为自己,但我没有VS2010(还)) 说我有2个基本接口: IBaseModelInterface IBaseViewInterface 和2接口实现那些: ISubModelInterface : IBaseModelInterface ISubViewInterface : IBaseViewInterface 如果我定义了一个Tuple<IBaseModelInt