C# typeof | |
---|---|
S-type Автор Сообщений: 2969 Дата регистрации: 24.04.2004 |
Если сделать:
высвечивается "String". Если сделать:
высвечивается "Eee". Конечно, логика понятна. Вопрос - как для типа Eee получить "struct"? |
Re: C# typeof | |
---|---|
Рома Сообщений: 1079 Дата регистрации: 06.06.2001 |
Если typeof(Eee).IsValueType то это "struct"
|
Re: C# typeof | |
---|---|
S-type Автор Сообщений: 2969 Дата регистрации: 24.04.2004 |
На сколько вижу, IsValueType - это проверка "является ли тип значимым". Возвращает True.
|
Re: C# typeof | |
---|---|
Рома Сообщений: 1079 Дата регистрации: 06.06.2001 |
Ну да.
Тебе же вроде надо разделить struct (value type) или class (reference type)? |
Re: C# typeof | |
---|---|
S-type Автор Сообщений: 2969 Дата регистрации: 24.04.2004 |
Не совсем. Хотелось бы увидеть слово "struct" исходящее из глубин CLR.
Исправлено 1 раз(а). Последнее : S-type, 20.02.17 13:40 |
C# typeof | |
---|---|
S-type Автор Сообщений: 2969 Дата регистрации: 24.04.2004 |
То то типа:
|
Re: C# typeof | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Там (в глубинах) никаких struct нету. Это ключевое слово языка C#, к CLR прямого отношения не имеющее. В CLR есть базовый тип для всех структур под названием System.ValueType. Ну и указанное свойство-флаг IsValueType
msdn.microsoft.com
------------------ WBR, Igor |
Re: C# typeof | |
---|---|
S-type Автор Сообщений: 2969 Дата регистрации: 24.04.2004 |
Т.е. слово "struct" в явном виде мне не увидеть... Только по "косвенным признакам"
|
Re: C# typeof | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Естественно.
Не понятно сие желание. И чем не устраивает предложенное решение - ибо оно по сути отвечает на вопрос является тип "структурой", или же "классом". Ну с небольшим уточнением по поводу enum (есть свойство IsEnum для этого) - конечно если их нужно отделить от struct... ------------------ WBR, Igor |
Re: C# typeof | |
---|---|
S-type Автор Сообщений: 2969 Дата регистрации: 24.04.2004 |
Почему String или Int32 можно увидеть, а "struct" нельзя (риторически)?
|
Re: C# typeof | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Потому что System.String это конкретный класс, System.Int32 - тоже. Те же int или string увидеть нигде нельзя.
struct это вообще абстракция (как и class, interface, enum, event, delegate) - это НЕ нечто конкретное. Это шаблон для создания чего-то конкретного, что как раз вполне можно увидеть - как твой класс "Eee". Равно можно увидеть его "свойсвта", в т.ч. и то что он был порождён синтаксической конструкцией struct. Можно даже увидеть его базовый тип - который есть System.ValueType - он одинаков для всех структур. Не понимаю чего ещё ты хочешь увидеть, и для чего это может быть нужно... И так всё видно - для любых мыслимых применений ------------------ WBR, Igor |
Re: C# typeof | |
---|---|
S-type Автор Сообщений: 2969 Дата регистрации: 24.04.2004 |
На сколько понимаю, int это псевдоним для System.Int32. Соответственно:
возвращают System.Int32.
Если попробовать, то
даже не компилируется - пишет "Требуется тип". Т.е. struct - это не тип, это всего навсего ключевое слово с помощью которого можно описать некую конструкцию (тип), с помощью которой выделить память (создать объект)... Буду знать.
Понять хочу, как это устроено Исправлено 1 раз(а). Последнее : S-type, 20.02.17 20:41 |
Re: C# typeof | |
---|---|
S-type Автор Сообщений: 2969 Дата регистрации: 24.04.2004 |
Недавно мне анекдот рассказали. Идёт концерт, выходит на сцену гитарист, начинает играть разные сложные аккорды то тихо, то громко, то быстро, то медленно, быстро перебегает от нижних нот к высоким и наоборот... Народ послушал, жидко так похлопал. Потом выходит старый опытный гитарист, и на трёх аккордах играет простенькую мелодию. Зал при этом взрывается, заваливают гитариста цветами, требуют "на бис". После концерта подходит молодой к опытному и спрашивает "я виртуозно владею всеми особенностями гитары, а ты всего тремя аккордами завёл толпу. ка же так?" На что опытный отвечает "ты только ищешь свои аккорды, а я их уже нашёл".
Анекдот мне рассказали не просто так, а после того, как я вышел на какой то сайт, где были тесты по C#, и не набрал даже 50%. Потому как вопросы типа "найдите в программе ошибку" жутко напрягают - IDE (точнее, компилятор) всегда ищет ошибки гораздо лучше и быстрее меня. И смысл не в том, что бы найти ошибку, а в том, что бы её исправить. IMHO, подобные вопросы по большей части бесполезны. Так же, на мой взгляд, вопросы типа "может ли быть индексатор статическим" то же особого ума не прибавляют. Но, с другой стороны, полезно иногда задуматься "почему так, а не иначе". |
Re: C# typeof | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Да, но прежде всего это ключевое слово языка C# - и посему его не может быть нигде в CLR - это лишь инструкция компилятору. Именно так. При том System.ValueType это таки тип, он является "базовым" для всех структур, при том он весьма специфичен - например его нельзя явно назначить базовым ни для какого своего класса (при том что ключевое слово struct как раз именно его и назначает базовым для описываемого класса-структуры). Что ещё более интересно, хотя он и является базовым для структур, сам он на вопрос IsValueType ответит false Не совсем так. Описание типа не выделяет никакой памяти. Память выделяет оператор new при создании экземпляра (для статических полей - сам рантайм при инициализации типа - обычно при первом обращении к нему) - вот как он это делает - это определяет тип... Похвально - но прежде надо бы все "основы" вызубрить. А уж потом читать про внутренности CLR и всякие особенности реализации. Если они про синтаксическую ошибку - ну это механистический подход к проверке знаний... Чем-то напоминает боянистую историю про тупого ребёнка, которого научили тому что "Амазонка самая длинная река в мире", но ответить на вопрос "какая река самая длинная" он не может - а спрашиваешь "что такое Амазонка" - он как попугай повторяет заученную фразу Вот ЛОГИЧЕСКИЕ ошибки - это совершенно другое дело! Никакой компилятор их не найдёт и не "подсветит", а уметь их находить - жизненно важно для разработчика! P.S. На вопрос про статический индексатор можно нагуглить кучу инфы - ибо ответ то весьма интересный они банально "не посчитали нужным такое реализовывать". Что ещё интереснее, сам CLR никак не воспрещает подобный "индексатор" соорудить - ведь индексатор это банально метод (или два) со специальным именем и метаданные связывающие это хозяйство для удобства кодирования. Соответственно в редакторе IL кода можно спокойно сделать статический get_Item/set_Item и тем самым получить по сути "статический индексатор" Естественно недоступный C# и даже VB коду, но в IL вполне себе работоспособный И в принципе не исключено что в какой-либо из будущих версий C# появится и static[...] или там class[...] наравне с this[...] И станет реальной так вожделенная многими фишка замены Encoding.GetEncoding("ru") на Encoding["ru"] ------------------ WBR, Igor |
Re: C# typeof | |
---|---|
Simple777 Сообщений: 33855 Дата регистрации: 05.11.2006 |
Цитата: |
Re: C# typeof | |
---|---|
S-type Автор Сообщений: 2969 Дата регистрации: 24.04.2004 |
На сколько понимаю, при работе со структурами оператор new не нужен и просто игнорируется.
и
ни чем не отличаются. |
Re: C# typeof | |
---|---|
Рома Сообщений: 1079 Дата регистрации: 06.06.2001 |
new Eee() и default(Eee) одно и то же в случае структур. Поэтому для структуры нельзя определить конструктор по умолчанию, но с параметрами сколько угодно. |
Re: C# typeof | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Отличаются. Сам попробуй
------------------ WBR, Igor |
Re: C# typeof | |
---|---|
S-type Автор Сообщений: 2969 Дата регистрации: 24.04.2004 |
Попробовал. На
компилятор ругается Цитата: Блин... Где тут смайлик "биться головой о стену"... В общем, не использовал ни когда структуры (классами как то обходился ), и дальше, судя по всему, не буду. Не, брошу C# и буду программировать на Java. Не, брошу программировать и уйду в монастырь... |
Re: C# typeof | |
---|---|
S-type Автор Сообщений: 2969 Дата регистрации: 24.04.2004 |
Экземпляр структуры это объект?
Такой код:
Вопрос, еее - это объект? |
© 2000-2024 Fox Club  |