제네릭에서 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키워드를 사용하면 변수에 대해 가능할 수 있습니다.
로 봐 Covariance와 Contravariance함께 소개 .Net 4.0. 하지만 지금은 작동합니다 interfaces.
예:
IEnumerable<Base> list = new List<SubClass>();
더 없다 정확한 상당 (타입 시스템 유형의 삭제와 모두와 아주 동일한 방식으로 작동하지 않기 때문에),하지만 당신은 매우 비슷한 기능을 얻을 수 있습니다 in및 out사용 공분산 및 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
'IT TIP' 카테고리의 다른 글
| Android : '위치'유형의 변수를 초기화하는 방법 (null과 동일하게 만드는 것 제외) (0) | 2020.12.11 |
|---|---|
| : 레일 route.rb에서와 같이 (0) | 2020.12.11 |
| tmux 상태 표시 줄 구성 (0) | 2020.12.11 |
| PostgreSQL“클러스터”란 무엇이며 어떻게 생성합니까? (0) | 2020.12.11 |
| & x 대신 addressof (x)를 사용하는 경우 (0) | 2020.12.11 |