Атрибут в конструкторе структуры по умолчанию - PullRequest
0 голосов
/ 24 мая 2018

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

public struct MyStruct
{
    public MyStruct() { … } // Not allowed!
}

Мне было интересно, если и как я могу применить атрибут к этому точному конструктору.В конце я хочу сделать следующее (лучше всего, если бы конструктор без параметров мог быть закрытым, но это тоже недопустимо):

public struct MyStruct
{
    [Obsolete("Do not call the constructor directly, use MyStruct.Get() instead.")]
    public MyStruct() { … }

    public static MyStruct Get
    {
      // Important initializing here.
    }
}

Есть ли что-то похожее на эту цель вымышленного атрибута[constructor: Obsolete()] которая позволяет применять атрибут к конструктору по умолчанию?

РЕДАКТИРОВАТЬ: Еще немного информации.

Ситуация такова: мне нужно использовать MyStruct дляP / Invoke и не может использовать класс.Я хочу предупредить пользователя, что он не должен получать экземпляр MyStruct, поскольку он пропускает важную инициализацию, и вместо этого ему следует использовать фабричный метод.

1 Ответ

0 голосов
/ 24 мая 2018

Поскольку структура является ValueType, по своей природе вы не можете найти никакого способа .

, даже если вы создали экземпляр структуры или нет, он будет создан.

int x = new int(); эквивалентно int x;

и

MyStruct s = new MyStruct(); эквивалентно MyStruct s;

Предположим, вы можете найти способ предупредить о MyStruct s = new MyStruct();.Любое определение MyStruct s; также предупреждено!Тогда нет пути.

...