Предположим, например, я определяю класс Complex
для представления комплексных чисел. Я хотел бы определить два конструктора, так что я могу написать, например:C#: методы и конструкторы одинаковой подписи и именованные аргументы
Complex z1 = new Complex(x: 4, y: 3);
Complex z2 = new Complex(r: 2, theta: Math.PI/4);
Однако, я не могу определить конструктор, как это:
public Complex(double x, double y) { ... }
public Complex(double r, double theta) { ... }
, потому что оба конструкторы будут иметь ту же подпись, которая не допускается. Но в C# 4, я могу написать это, используя дополнительный аргумент:
public Complex(double x, double y) { ... }
public Complex(double r, double theta, bool unused=true) { ... }
Он работает, я могу затем использовать вышеуказанные вызовы конструктора по назначению. Единственная цель аргумента unused
- сделать разные подписи; он полностью не используется, как при определении, так и при вызове конструктора.
Мне кажется, что это уродливый трюк: есть ли лучший вариант?
На самом деле вы ничего не покупаете - у вас нет контроля над тем, что вы вызываете с двумя двойными аргументами (он всегда будет одним и тем же). –
Вы правы, но моя цель - явно выбрать, какой конструктор я хочу использовать, используя именованные аргументы. – ChrisJ