Разрешить классу содержать только поля типа значения - PullRequest
1 голос
/ 19 июня 2020

Чего я хочу достичь:

Контейнер, содержащий группы полей типов значений.

Контейнер имеет следующие характеристики

  1. Действует как POD .
  2. Изменяемый
  3. Может быть скопирован по значению.
  4. Поля контейнера в будущем будут расти.

Для разрешения быть скопировано, моя попытка использует MemberwiseClone(), который будет неглубоко скопировать контейнер.

Таким образом, класс, содержащий только поля типа значения, может работать, но MemberwiseClone() может быть сломан, если класс содержит ссылочный тип, а MemberwiseClone() скопируйте ссылку.

Мое намерение состоит в том, чтобы не дать неопытным разработчикам случайно взломать систему.

Ожидаемый ответ:

  1. Какой-то атрибут узел [AllowOnlyValueTypeFields] в классе, чтобы компилятор мог его проверить.

    [AllowOnlyValueTypeFields]
    class foo {
        int[] bar; // beep! compiled failed.
    }
    
  2. Может быть ... шаблон проектирования может решить эту проблему?

Текущее решение:

  1. Единицы измерения t с помощью отражения и проверьте каждое поле контейнера.
  2. «Правило» о том, что ссылочный тип не используется в этом контейнере и вскоре о нем забудут.

Ключевые слова:

  1. C# свойство поля только тип значения
  2. C# свойство поля допускает только тип значения
  3. C# принудительное переполнение поля только типа значения

Ни один из вышеперечисленных результатов не дал значимых результатов.

Любые предложения приветствуются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...