C#'s equivalent of Java's <? extends Base> in generics

后端 未结 4 1520
北荒
北荒 2020-12-04 18:57

In Java, I can do the following: (assume Subclass extends Base):

ArrayList aList = new ArrayList

        
相关标签:
4条回答
  • 2020-12-04 19:31

    Look into Covariance and Contravariance introduced with .Net 4.0. But it only works with interfaces right now.

    Example:

    IEnumerable<Base> list = new List<SubClass>();
    
    0 讨论(0)
  • 2020-12-04 19:32

    If you are looking for two type generics, Take a look at this:

        void putAll<K1, V1>(Dictionary<K1,V1> map) where K1 : K where V1 : V;
    
    0 讨论(0)
  • 2020-12-04 19:33

    Actually there is an Equivalent(sort of), the where keyword. I don't know how "close" it is. I had a function I needed to do something similar for.

    I found an msdn page about it.

    I don't know if you can do this inline for a variable, but for a class you can do:
    public class MyArray<T> where T: someBaseClass
    or for a function
    public T getArrayList<T>(ArrayList<T> arr) where T: someBaseClass

    I didn't see it on the page but using the where keyword it might be possible for a variable.

    0 讨论(0)
  • 2020-12-04 19:39

    There is no exact equivalent (since the type system doesn't work in quite the same way, with type erasure and all), but you can get very similar functionality with in and out using covariance and contravariance.

    0 讨论(0)
提交回复
热议问题