Пользовательский тип данных C#! [дубликат]

8
задан Community 23 May 2017 в 12:18
поделиться

4 ответа

Вы не можете создавать свои собственные инициализаторы суффиксов - это часть языка и встроена в компилятор. С другой стороны, если вы напишете свой собственный компилятор C #, вы сможете делать все, что захотите, и расширять его так, как захотите.

Что касается того, как вы его инициализируете - это зависит от того, как вы это написали. Если это класс, вам нужно будет инициализировать его ключевым словом new или написать несколько неявных преобразований в числовые типы с меньшей точностью.

Как заметил Джон, у вас не будет возможности установить для него значение больше, чем ulong.MaxValue , без каких-либо манипуляций со строкой. Вам также придется внутренне представлять в некоторой форме (строка? Количество ulongs ?) И убедиться, что все преобразования и операции работают правильно (как насчет переполнения?).

8
ответ дан 5 December 2019 в 06:09
поделиться

Вы можете посмотреть на новую структуру BigInteger в 4.0 для получения советов по инициализации. http://msdn.microsoft.com/en-us/library/system.numerics.biginteger.aspx

1
ответ дан 5 December 2019 в 06:09
поделиться

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

Наиболее очевидными вариантами являются Int128(long hi, ulong lo) и Int128(string).

1
ответ дан 5 December 2019 в 06:09
поделиться

Нет, вы не можете создать свою собственную форму литерала на C #.

Вы могли иметь неявное преобразование из int , long , uint и ulong , что позволяет:

Int128 a = 100;

, но таким образом вы не сможете указать значения больше, чем ulong.MaxValue .

Неявное преобразование из decimal позволило бы расширить диапазон, но было бы плохой идеей, потому что вы потеряете данные для любого значения, которое не является просто целым числом.

По сути, нет ничего, что позволяло бы получить буквальное гарантированное целочисленное значение больше, чем ulong.MaxValue - вы могли бы проанализировать строку, но это не совсем идеально. В качестве альтернативы вы можете создать конструктор, который принимает два ulong, один для нижних 64 бита и один для верхних 64 бита.

17
ответ дан 5 December 2019 в 06:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: