У меня есть куча кода, у которого есть целые числа с разными значениями (я бы предпочел общее решение, но для конкретного примера: день месяца от месяца до месяца год-год и т. д.). Я хочу иметь возможность перегружать конструктор класса на основе этих значений.typedef эквивалент для перегрузки в C#
Например
int a; // takes role A
int b; // takes role B
var A = new Foo(a); // should call one constructor
var B = new Foo(b); // should call another constructor
Теперь ясно, что не будет работать, но если бы я мог определить тип (не только псевдоним), который является int
во всем, кроме названия, как это:
typedef int TypeA; // stealing the C syntax
typedef int TypeB;
Я могу сделать перегрузку, в которой я нуждаюсь, и пусть система типов отслеживает, что это такое. В частности, это позволило бы мне убедиться, что значения не смешиваются, например, значение, возвращаемое функцией, поскольку год не используется как день месяца.
Есть ли какой-либо недостаток class
или struct
обертки для этого в C#?
Было бы неплохо, если бы решение также работало для поплавков и парных.
это как структура и без неявного кастинга - это то, что я делал. Это работает хорошо. – BCS
Есть ли штраф за исполнение для этого или компиляторы C#, достаточные для оптимизации оболочки? Я пропускаю что-то, что эквивалентно новому типу Haskell в C# (они суть то, что вы только что сделали, но стираются во время компиляции (но после проверки типов)). – FunctorSalad
Я не знаю, будет ли значительная часть штрафа за исполнение или нет. Боюсь, вам придется попробовать и посмотреть. –