Использование необязательного параметра типа System.Drawing.Color
Я начинаю использовать дополнительные параметры в .Net 4.0
Проблема, с которой я столкнулась, - это когда я пытаюсь объявить необязательный параметр System.Drawing.Color:
public myObject(int foo, string bar, Color rgb = Color.Transparent)
{
// ....
}
Я хочу, чтобы Color.Transparent был значением по умолчанию для параметра rgb. Проблема в том, что я продолжаю эту ошибку компиляции:
Значение параметра по умолчанию для 'rgb' должно быть константой времени компиляции
Это действительно убивает мой план, если я могу использовать только примитивные типы для необязательных параметров.
Ответы
Ответ 1
В ситуациях, подобных этому, можно использовать типы Nullable value.
public class MyObject
{
public Color Rgb { get; private set; }
public MyObject(int foo, string bar, Color? rgb = null)
{
this.Rgb = rgb ?? Color.Transparent;
// ....
}
}
BTW, причина, по которой это требуется, - это то, что значение по умолчанию заполняется в точке вызова во время компиляции, а значения static readonly
не заданы до времени выполнения. (По инициализатору типа)
Ответ 2
Я не большой поклонник необязательных параметров для таких случаев вообще. IMO наилучшим вариантом использования для дополнительных параметров является взаимодействие с COM, где дополнительные параметры используются довольно немного. Ситуации, подобные этим, являются одной из причин, почему (я бы догадался), что дополнительные параметры не попадают в язык до 4.0.
Вместо создания необязательного параметра перегрузите функцию следующим образом:
public myObject(int foo, string bar) : this (foo, bar, Color.Transparent) {};
public myObject(int foo, string bar, Color RGB) {
...
}