Использование необязательного параметра типа System.Drawing.Color

Я начинаю использовать дополнительные параметры в .Net 4.0

Проблема, с которой я сталкиваюсь, заключается в том, объявить необязательный параметр System.Drawing.Color:

public myObject(int foo, string bar, Color rgb = Color.Transparent)
{
    // ....
}

Я хочу Color. Прозрачный, чтобы быть значением по умолчанию для параметра rgb. Проблема в том, что я продолжаю получать эту ошибку компиляции:

Значение параметра по умолчанию для 'rgb' должно быть константой времени компиляции

. Это действительно убивает мой план, если я могу использовать только примитивные типы для необязательных параметров.

16
задан Neil N 6 August 2010 в 14:27
поделиться

2 ответа

Обнуляемые типы значений могут использоваться в подобных ситуациях.

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 не устанавливаются до времени выполнения. (По инициализатору типа)

24
ответ дан 30 November 2019 в 21:18
поделиться

Я вообще не большой поклонник необязательных параметров для подобных случаев. IMO лучший вариант использования необязательных параметров - это взаимодействие с COM, где необязательные параметры используются довольно часто. Подобные ситуации - одна из причин, по которой (я предполагаю), что необязательные параметры не вошли в язык до 4.0.

Вместо создания необязательного параметра перегрузите функцию следующим образом:

public myObject(int foo, string bar) : this (foo, bar, Color.Transparent) {};

public myObject(int foo, string bar, Color RGB) {
...
}
3
ответ дан 30 November 2019 в 21:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: