2 / 2 / 1
Регистрация: 31.01.2016
Сообщений: 119
|
|
1 | |
Псевдонимы(алиасы) в перечисления - правила использования17.02.2016, 20:58. Показов 6676. Ответов 16
Метки нет (Все метки)
Всем привет! Сейчас изучаю перечисления в c# и хотел спросить, почему в с# можно использовать псевдоним для любого целого типа данных
(byte, sbyte, short, ushort, int, uint, long, ulong) , но нельзя использовать любой системный целый тип данных C# (Byte, SByte, Int16, UInt16, Int32, UInt32, Int64, UInt64) ? Когда я смотрел видео урок, то там был такой пример-объяснение: "Представте себе ситуацию в которой возможно, Вы захотите отказаться от Framework-ов предоставляемых Microsoft в языке c# и отключите импорт всех библиотек и в том числе импорт библиотеки System, и решите создавать свои типы. Вы ведь можете создавать свои типы? Конечно же да, но при этом у вас должны остаться простейшие типы данных. Так вот, простейшие типы даннных(даже при отключенной библиотеке System) у вас все же останутся, но в виде алиасов, а не в виде полноценной структуры (например byte) которая входит в пространство имен System. ". Почему при таком подробном описании ситуации я это все спрашиваю? Дело в том, что далее по уроку автор уделил теме алиасов еще некоторое время (а сам автор страдает забывчивостью сказать что то важное и иногда к сожалению обладает некоторой степенью недосказанности по некоторым вопросам) Вот в чем мой вопрос: Есть ли еще причины (помимо вышеприведенного примера) почему в перечислениях используют алиасы(псевдонимы)?
0
|
17.02.2016, 20:58 | |
Ответы с готовыми решениями:
16
Правила использования операций Правила использования ExtractFileFromCab Особенности использования правила float Пределы без использования правила Лопиталя |
Администратор
|
||||||
18.02.2016, 01:29 | 3 | |||||
Сообщение было отмечено BadCats как решение
Решение
BadCats, если я правильно понимаю тебя интересует почему можно написать
enum Smth : int { ... } , но нельзя написать enum Smth : Int32 { ... } . Если разрешить второй вариант, то можно будет написать такой код, который компилятору придется проверять.
2
|
18.02.2016, 08:33 | 4 | ||||||||||
Сообщение было отмечено BadCats как решение
Решение
Жизнь они упростили только компилятору Программисты же ломают головы, изыскивая в запрете Int32 и разрешении int тайный смысл.
Это всё равно не наследование. Код с типами и их алиасами компилируется из
А якобы переносимость без стандартных типов будет какая-то теоретическая, сферическая и в вакууме. Вроде бы и можно её сделать, но никому нафиг не надо.
1
|
2 / 2 / 1
Регистрация: 31.01.2016
Сообщений: 119
|
|
18.02.2016, 20:22 [ТС] | 5 |
т.е, когда я использую алиасы в перечислениях, то теоретически работа компилятора будет идти быстрее т.к компилятору не придется проверять что Int32 это System.Int32 или я ошибаюсь?
0
|
2 / 2 / 1
Регистрация: 31.01.2016
Сообщений: 119
|
|
22.02.2016, 20:39 [ТС] | 7 |
можно ссылку на источник?
0
|
22.02.2016, 20:51 | 8 |
https://connect.microsoft.com/... stem-int64
https://connect.microsoft.com/... -type-name - эти ссылки уже не работают, за что спасибо MS. Может быть в архиве каком-нибудь найдёте. http://stackoverflow.com/quest... on-to-long https://social.msdn.microsoft.... rplanguage - здесь закончилось призывом модератора принять всё как есть и верить MS святоликому. Меня, впрочем, не убедило.
1
|
2 / 2 / 1
Регистрация: 31.01.2016
Сообщений: 119
|
|
22.02.2016, 20:54 [ТС] | 10 |
простите не понял. Можно пожалуйста подробнее?
0
|
Master of Orion
|
|
22.02.2016, 21:53 | 11 |
BadCats, int == Int32 == System.Int32. Сокращенные записи существуют только для программиста.
Добавлено через 28 минут BadCats, кстати var туда же. Компилятор и так и так выводит тип, поэтому если кто думает, что не используя var упрощает задачу компилятору - то он сильно ошибается. Или не использует юзинги - что с ними, что без них, скорость будет одна и та же. Причем для компилятора все типы характеризуются просто числом - уникальным идентификатором. Если точнее - адресом VTable в памяти И вот с этим числом работает компилятор. А все эти строки существуют только для работы с ними людей.
2
|
2 / 2 / 1
Регистрация: 31.01.2016
Сообщений: 119
|
|
23.02.2016, 13:11 [ТС] | 12 |
нашел! на archive.org Это оно?
https://web.archive.org/web/20... stem-int64
0
|
23.02.2016, 13:47 | 13 |
Да, оно.
Как видите, "by design" и "won't fix". Добавлено через 12 минут
1
|
2 / 2 / 1
Регистрация: 31.01.2016
Сообщений: 119
|
|
07.03.2016, 16:40 [ТС] | 14 |
Привет Ruis, переводил данную тобой тему на "Великий и могучий", и хотелось бы узнаттьь твое мнение по поводу данного высказывания:
все остальные кстати тоже могу высказываться мне необходимо узнать: есть ли крупица смысла(смысла про то, что в IL коде это все же разные типы) в этих цитатах-предположениях или это просто бред?
0
|
Master of Orion
|
|
07.03.2016, 18:10 | 15 |
BadCats, ну почему, человека понять можно. Он говорит о том, что для программиста short и Int16 это один и тот же тип, но для рантайма это разные вещи. Из шарпа ты отличий никогда не увидишь, потому что на уровне языка это опять же одно и то же (примитивное typeof(short) == typeof(Int16) это подтвердит), а вот на нижележащих уровнях это разные вещи, потому что Int16 - это структура, в которую упаковывается "настоящее" число при боксинге, а при анбоксинге соответственно оно достается. Соответственно т.к. вызовы методов (по крайней мере через интерфейс) без боксинга невозможны, то и вызывать их можно только на "взрослой" структуре. Про случаи, когда можно использовать только число, но нельзя структуру немного не понял - слишком низкоуровневые вещи затронуты.
0
|
2 / 2 / 1
Регистрация: 31.01.2016
Сообщений: 119
|
|
07.03.2016, 21:35 [ТС] | 16 |
Может я сейчас напишу ОЧЕНЬ БОЛЬШУЮ ГЛУПОСТЬ, но каким боком это к несовместимости (в версии C# младше 6.0) алиасов и "полноценных типов" в перичеслениях? Короче вопрос всей этой темы, приминительно к этим ответам на иностранном MSDN
0
|
6451 / 4053 / 1598
Регистрация: 09.05.2015
Сообщений: 9,481
|
|
04.06.2016, 23:43 | 17 |
Судя по всему данное ограничение было убрано в C# 6.0: источник.
0
|
04.06.2016, 23:43 | |
04.06.2016, 23:43 | |
Помогаю со студенческими работами здесь
17
Какие правила использования динамических массивов? Правила использования строчных и блочных элементов Правила использования внешнего жесткого диска Посчитать предел, без использования правила Лопиталя Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |