2009-12-16 2 views
0

Использует ли .net CLR объекты, указанные в декларации коллекции? Если я объявляюПроизводит ли. Net при использовании объекта в коллекции с использованием дженериков?

List<string> lststrs= new List<string>(); 
lststrs.add("ssdfsf"); 

делает .net этого объекта преобразованием типов при добавлении и retriving ?????

Ну, я думаю, что сам вопрос не был четко понят для всех. Позвольте мне подробно остановиться. В java есть дженерики, но если вы декомпилируете код, вы заметите, что компилятор помещает приведение типов везде, где используется объект Collection. Для Ex: Список listOfStrings; listOfStrings.add (""); Строковое значение = listOfStrings.get (1); После декомпиляции файла класса мы видим этот список ListOfStrings; listOfStrings.add (""); Строковое значение = (String) listOfStrings.get (1); Здесь у компилятора есть штрих-код для строки типа.

Теперь у меня вопрос, является ли он таким же .Net ??

ответ

2

ли вы имеете в виду это?

List<string> myList = new List<string>(); 

Список является универсальным типом - если вы заявляете, как показано ниже, вы получите ошибку compialtion:

List myList = new List(); //<-- big mama of a compilation error 

Во всяком случае - так это общий список, что сильно типизированных, так что вы не будете быть в состоянии передать все, что не является строкой (если вы это сделаете, то результат - снова - в big mama ошибки компиляции).

5

Нет, ваш список строго типизирован для строк. В этом все преимущества использования дженериков.

1

Нет. Это не нужно, поскольку набирается коллекция.

1

Никаких приводов не требуется. Факт использования дженериков делает ваш список строго типизированным.

3

Это не тип.

Универсальный тип безопасности, позволяющий добавлять объекты определенного типа в общую коллекцию. Это предупреждения компилятора.

В вашем примере, если вы пытались добавить другой объект, например целое число, тогда вы получите предупреждение о компиляторе.

2

Там нет такого понятия, как «Список» :)

Однако есть List<string>. Здесь он не будет использовать вашу строку, так как это набор строк.

Рассмотрим это, хотя:

List<object> objects = new List<object>(); 
objects.Add("Hello SO.com"); 
string myString = objects.First(); //Wont compile, as objects return an object. 
//You need to cast it to a string (for example, by using the as operator). 
1

Нет, это не так. В отличие от Java, CLR реализует generics как разные типы самостоятельно, а не через стирание типа. Таким образом, List<string> отличается от List<int>, и оба типа динамически изменяются во время выполнения, когда это необходимо.

1

NO.

Просмотреть реализацию списка.Add:

+1

Ну, я думаю, что сам вопрос не был четко понят всеми. Давайте подробно рассмотрим. В java есть дженерики, но если вы декомпилируете код, вы заметите, что компилятор помещает приведение типов везде, где используется объект Collection. Ex: Список listOfStrings; listOfStrings.add (""); Строковое значение = listOfStrings.get (1); После декомпиляции файла класса мы видим это Список listOfStrings; listOfStrings.add (""); Строковое значение = (String) listOfStrings.get (1); Здесь у компилятора есть штрих-код для строки. Теперь у меня вопрос, так ли это в .Net ?? – Ravisha

+0

Итак, отредактируйте свой вопрос, если вы хотите найти ответ на свой подробный вопрос. :) – serhio