IT TIP

C#'s equivalent of Java's in generics

itqueen 2020. 12. 11. 21:09
반응형

제네릭에서 Java와 동일한 C #


Java에서는 다음을 수행 할 수 있습니다. ( Subclassextends 라고 가정 Base) :

ArrayList<? extends Base> aList = new ArrayList<Subclass>();

C # .NET에서 동등한 것은 무엇입니까? 아무 없다 ? extends분명히 키워드는이 작동하지 않습니다 :

List<Base> aList = new List<Subclass>();

실제로 Equivalent (일종의) where키워드가 있습니다. 얼마나 "가까운 지"모르겠습니다. 비슷한 일을해야하는 기능이있었습니다.

그것에 대한 msdn 페이지를 찾았 습니다.

변수에 대해 인라인으로 할 수 있는지 모르겠지만 클래스에 대해서는 할 수 있습니다.
public class MyArray<T> where T: someBaseClass
또는 함수에 대해
public T getArrayList<T>(ArrayList<T> arr) where T: someBaseClass

나는 그것을 페이지에서 보지 못했지만 where키워드를 사용하면 변수에 대해 가능할 수 있습니다.


로 봐 CovarianceContravariance함께 소개 .Net 4.0. 하지만 지금은 작동합니다 interfaces.

예:

IEnumerable<Base> list = new List<SubClass>();

더 없다 정확한 상당 (타입 시스템 유형의 삭제와 모두와 아주 동일한 방식으로 작동하지 않기 때문에),하지만 당신은 매우 비슷한 기능을 얻을 수 있습니다 inout사용 공분산 및 contravariance을 .


두 가지 유형의 제네릭을 찾고 있다면 다음을 살펴보십시오.

    void putAll<K1, V1>(Dictionary<K1,V1> map) where K1 : K where V1 : V;

참고 URL : https://stackoverflow.com/questions/4732494/cs-equivalent-of-javas-extends-base-in-generics

반응형