что связано с вашим ответом?

a я могу сделать следующее: (предположим,Subclass продолжаетсяBase):

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

Что является эквивалентом в C # .NET? Здесь нет? extends Ключевое слово, по-видимому, и это не работает:

List<Base> aList = new List<Subclass>();
 meandmycode19 янв. 2011 г., 09:00
На самом деле нет эквивалента в .net, слава богу
 meandmycode19 янв. 2011 г., 09:52
Ваш пример показывает разбитую дисперсию типа в Java, .net не имеет разбитой дисперсии ... ну, кроме одного места.
 finnw19 янв. 2011 г., 13:45
 Louis Rhys19 янв. 2011 г., 09:55
разбитый тип дисперсии?
 Louis Rhys19 янв. 2011 г., 09:19
почему это хорошо?

Ответы на вопрос(4)

точный эквивалентно (так как система типов не работает одинаково, с типом erasure и всем), но вы можете получить очень похожую функциональность сin а такжеout с помощьюковариация и контравариантность.

 Mehrdad14 июн. 2016 г., 11:18
@Taufel: На первый взгляд, по крайней мере, это выглядит как "проблема XY". Что тыфактически пытаешься сделать? Вы просто пытаетесь что-то построить? Потому что, вероятно, есть способ сделать это, который не предполагает точного соответствия семантики Java (что может быть даже невозможно).
 maliks14 июн. 2016 г., 11:20
Да, я действительно хочу сделать это с или без точного соответствия семантики Java, но конечный результат (функциональность) должен быть максимально
 Mehrdad14 июн. 2016 г., 11:12
@ Тауфель: Возможно, но у меня сейчас нет времени, к сожалению ...
 maliks14 июн. 2016 г., 11:09
@ Mehrdad - можешь ответитьэтот вопрос что связано с вашим ответом?
 maliks14 июн. 2016 г., 11:15
У меня есть эта проблема, так как количество дней, и это второй раз, когда я задавал такой вопрос, не могу понять, почему люди не могут ответить на этот вопрос точно
Решение Вопроса

where ключевое слово. Я не знаю, насколько это близко. У меня была функция, для которой мне нужно было сделать нечто подобное.

Я нашелстраница MSDN об этом.

Я не знаю, можете ли вы сделать это встроенным для переменной, но для класса вы можете сделать:
public class MyArray<T> where T: someBaseClass
или для функции
public T getArrayList<T>(ArrayList<T> arr) where T: someBaseClass

Я не видел его на странице, но с помощьюwhere Ключевое слово это может быть возможным для переменной.

 crush21 авг. 2013 г., 17:54
Какой уродливый способ сделать это, но, по крайней мере, он делает свою работу! +1
 Abhijeet Apsunde04 мар. 2013 г., 13:22
Этот ответ на самом деле квалифицируется как ответ
 Michael Krauklis04 янв. 2012 г., 23:44
Красиво, почти то, что я искал. Спасибо! открытый класс ImplementingClass <T>: BaseClass <T>, где T: GenericBaseClass {...}
 JeredM11 янв. 2018 г., 19:04
Вот еще один вариант, в котором ваш класс должен реализовывать IDisposable в дополнение к someBaseClass. открытый класс MyArray <T>: IDisposable, где T: someBaseClass
 maliks14 июн. 2016 г., 11:08
@ Raystrom - можешь ответитьэтот вопрос что связано с вашим ответом?

    void putAll<K1, V1>(Dictionary<K1,V1> map) where K1 : K where V1 : V;
 maliks14 июн. 2016 г., 11:09
@ Гильеме - можешь ответитьэтот вопрос что связано с вашим ответом?

Смотреть вCovariance а такжеContravariance представил с.Net 4.0, Но это работает только сinterfaces прямо сейчас.

Пример:
IEnumerable<Base> list = new List<SubClass>();
 maliks14 июн. 2016 г., 11:09
@ дециклон - можешь ответитьэтот вопрос что связано с вашим ответом?
 Balázs Édes23 мар. 2015 г., 16:30
Просто смотрю на эту ветку, пытаясь понять C # способ обобщения. Что произойдет, если статический тип вашего примераList<Base>и если я хочу добавитьBase реализатор, который не является экземпляромSubClass? Это будет ошибка во время выполнения?

Ваш ответ на вопрос