GetType() и класс

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

GetType() и класс

Сообщение pango 16 апр 2013, 15:26

В чём разница в 8-й и 9-й строчках,
одна прокатывает, другая нет,
хотя разницы на мой взгляд быть не должно.

Синтаксис:
  1. using UnityEngine; 
  2. using System; 
  3.  
  4. public class TypeTest : MonoBehaviour  
  5. void Start ()  
  6. Type type1 = GetType(); // всё путём 
  7. Type type2 = TypeTest; // компилятор ругается 


Ошибка: error CS0119: Expression denotes a `type', where a `variable', `value' or `method group' was expected
Аватара пользователя
pango
UNец
 
Сообщения: 29
Зарегистрирован: 05 апр 2013, 12:39

Re: GetType() и класс

Сообщение seaman 16 апр 2013, 19:35

Разница принципиальная. Вы не понимаете значения слов "тип", "переменная", "значение", "класс"
Type - это класс, который содержит в себе все данные об определенном типе.
Type type2 - так Вы определяете новую переменную - экземпляр класса Type.
Как Вы создаете новый экземпляр какого то класса? Правильно - вызовом конструктора! В первом случае конструктор класса Type есть внутри GetType. Где во втором случае конструктор?
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: GetType() и класс

Сообщение pango 16 апр 2013, 20:05

Type type2 - так Вы определяете новую переменную - экземпляр класса Type.
Как Вы создаете новый экземпляр какого то класса?


А по коду похоже что я собирался создать экземпляр?
Я хотел сослаться на оределённый тип, не более того.
Как выяснилось это делается с помощью typeof.

Питон или Экшенскрипт в аналогичных задачах - присвоить переменной ссылку на тип,
обходятся без подобных конструкций, и она оказалась мне в диковинку.
Аватара пользователя
pango
UNец
 
Сообщения: 29
Зарегистрирован: 05 апр 2013, 12:39

Re: GetType() и класс

Сообщение seaman 16 апр 2013, 20:07

А по коду похоже что я собирался создать экземпляр?

А Вы этого не понимаете? Ну я ж говорил, что Вы не знаете что такое переменная. Вам бы азы подучить.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: GetType() и класс

Сообщение pango 16 апр 2013, 20:33

Ещё раз:
Type type1 = GetType();
тут создаётся экземпляр? нет, переменной присваивается ссылочное значение

Type type2 = typeof(TypeTest)
тут создаётся экземпляр? нет, другой переменной присваивается тоже ссылочное значение
что лего проверить, сравнив (type1 == type2), естественно получим true.

О каких экземплярах Вы ведёте речь,
если в этом коде они не создаются?
Аватара пользователя
pango
UNец
 
Сообщения: 29
Зарегистрирован: 05 апр 2013, 12:39

Re: GetType() и класс

Сообщение seaman 16 апр 2013, 20:53

Объект Type возвращает оператор языка C# typeof (оператор GetType в Visual Basic, оператор typeid в Visual C++).
Представляющий тип объект Type уникален; это означает, что две ссылки на объект Type указывают на один и тот же объект тогда и только тогда, когда они представляют один и тот же тип. Это позволяет сравнивать объекты Type по равенству ссылок.

Вот про этот экземпляр класса Type я и говорю. Он создается один раз для каждого типа. А typeof и GetType его просто возвращают. Так что говоря "создается", я конечно несколько был не прав. Создается он при первом вызове typeof или GetType, а последующие вызовы просто возвращают ссылку на него.
Так что получается все же создаются - при первом вызове GetType. Во второй строке возвращается ссылка на уже созданный до того экземпляр класса.
Но вот скажите мне по первому Вашему посту - что Вы пытались присвоить переменной type2 строкой Type type2 = TypeTest;?
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: GetType() и класс

Сообщение pango 16 апр 2013, 21:04

Он создается один раз для каждого типа. А typeof и GetType его просто возвращают.

О чём я и говорил:)

Так что получается все же создаются - при первом вызове GetType.

Не совсем, он создаётся когда юнити инстанцирует TypeTest,
в методе Start которого, я и проводил свой маленький экспиримент.

Вы пытались присвоить переменной type2 строкой Type type2 = TypeTest;?

Да, и очень удивился когда вместо желаемого получил ошибку компилятора,
с отсылкой на действие, которое я в принципе не планировал.
Аватара пользователя
pango
UNец
 
Сообщения: 29
Зарегистрирован: 05 апр 2013, 12:39

Re: GetType() и класс

Сообщение seaman 16 апр 2013, 21:07

Не совсем, он создаётся когда юнити инстанцирует TypeTest

Может быть, но откуда Вы это взяли? Ссылочку плиз.
Да, и очень удивился

Ну а так не удивился бы?
Type type2 = float;
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: GetType() и класс

Сообщение pango 16 апр 2013, 21:17

Может быть, но откуда Вы это взяли? Ссылочку плиз.

Если создаётся экземпляр класса, определённо инстанцируется его описание,
тут мне кажется мало простора для дискуссии:)

Ну а так не удивился бы?
Type type2 = float;

До обеда бы удивился, сейчас не.

В Экшенскрипте обычное дело
var type:Class = String
Аватара пользователя
pango
UNец
 
Сообщения: 29
Зарегистрирован: 05 апр 2013, 12:39

Re: GetType() и класс

Сообщение seaman 16 апр 2013, 21:24

тут мне кажется мало простора для дискуссии:)

Понятно - т.е. Вам кажется. Ладно поищу поподробнее на досуге.
ЗЫ: судя по описанию Type ведет себя похоже на статический класс. А они создаются при первом обращении к ним. Но есть и отличия. Так что может и Вы правы.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 14