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