Ограничения конструктора сущностей LINQ2SQL - PullRequest
2 голосов
/ 17 июля 2011

L2SQL генерирует объекты с конструктором по умолчанию без параметров.Это НЕ МОЖЕТ быть изменено, так как это необходимо для материализации объекта.

Однако, если мой объект может быть создан только с определенными инициализированными значениями, как бы я скрыл конструктор без параметров, чтобы потребитель видел конструктор только спараметры?

1) Я могу создать еще один частичный класс с тем же именем и добавить туда свой новый конструктор, но у потребителя теперь просто есть две опции для создания экземпляра моего класса.Конструктор без параметров все еще виден.

2) Использовать интерфейсы.Невозможно создать интерфейс, который определяет конструкторы.

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

1 Ответ

1 голос
/ 17 июля 2011

Если я вас правильно понимаю, вы хотите запретить другим пользователям класса создавать его из конструктора без параметров, но при этом разрешить его использовать в Linq2SQL (как и должно быть).

К счастью, вынеправильно, когда вы говорите, что конструктор по умолчанию без параметров не может быть изменен.Если вы измените конструктор класса сущностей Linq2SQL на закрытый, он все равно будет вызываться Linq2SQL, так как он использует отражение, и если вы используете отражение, можно вызвать частный конструктор.(Между прочим, другие изменения в конструкторе также могут быть сделаны с Linq2SQL).

Конечно, другие пользователи класса могут также использовать отражение, чтобы вызвать этот частный конструктор и создать класс в частном состоянии, ноэто справедливо для всех классов .NET (и действительно применяется в других местах - например, зачастую нетрудно узурпировать конфиденциальность классов C ++, хотя в любом случае нет гарантии, независимой от реализации).Но тогда почти всегда можно использовать отражение, чтобы испортить класс;инкапсуляция - это механизм обеспечения правильности, а не безопасности.(Но ограничения безопасности в отношении того, какой код может использовать рефлексию, создают безопасность поверх этой меньшей гарантии).

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