Возможно ли в C# создать свой тип **значений**?
Тип в C# - это, в целом, класс.
Типы делятся на типы значения и ссылочные типы. Типами значений являются, например, int, double, float, bool... Типами же ссылочными являются, например, class, interface или - в Юнити - GameObject, Transform и т.д.
Так вот, если переменную типа значения можно присвоить сразу: int a=3; bool b = false;, то переменные ссылочных типов инициализируются при помощи слова new: Cat cat = new Cat("Tom");.
Я хочу создать свой тип для хранения больших чисел. Он будет представлять числа больше миллиона в экспоненциальном формате, например, 3.67 E8 - это 3.67*10^8, т.е. 367000000.
Сейчас у меня есть такой класс:
public class LargeInt {
public string Number;
(1) public LargeInt (string number) => Number = number;
}
Его я могу инициализировоать с помощью конструктора через слово new: LargeInt price = new LargeInt("5 E10"), т.е. это ссылочный тип.
Возможно ли сделать так, чтобы класс инициализировался прямо: LargeInt price = "5 E10";?
Этот класс потом будет похож на обычный int. В нем будут функции ToString(), CompareTo(), операторы +,-... Потому что int не может работать с числами больше двух миллиардов с хвостиком.
Ответы (1 шт):
User-defined conversion operators
Как пример
public class MyClass
{
public string Val {get; private set;}
public static implicit operator MyClass(string d) {
var ret = new MyClass();
ret.Val = d;
return ret;
}
}
Использование
MyClass myclass = "some text";
Console.WriteLine(myclass.Val);
Вывод
some text