繁体   English   中英

LINQ2SQL 实体构造函数约束

[英]LINQ2SQL entity constructor constraints

L2SQL 生成具有默认无参数构造函数的实体。 这不能更改,因为它需要实现 object。

但是,如果我的 object 只能使用初始化的某些值创建,我将如何 go 隐藏无参数构造函数以便消费者只能看到带参数的构造函数?

1)我可以创建另一个同名的部分 class 并在那里添加我的新构造函数,但消费者现在只有两个选项来创建我的 class 的实例。 无参数构造函数仍然可见。

2)使用接口。 无法创建定义构造函数的接口。

人们如何处理这个问题,因为它看起来像一个会经常发生的问题。

如果我理解正确,您想阻止 class 的其他用户从无参数构造函数构造一个,但仍允许 Linq2SQL 使用它(因为它必须这样做)。

幸运的是,当您说无法更改默认的无参数构造函数时,您错了。 如果您将 Linq2SQL 实体 class 的构造函数更改为私有的,那么 Linq2SQL 仍然会调用它,因为它使用反射,并且如果使用反射,则可以调用私有构造函数。 (顺便说一句,构造函数的其他更改也可以使用 Linq2SQL 完成)。

Of course, the other users of the class can also use reflection to call that private constructor and create a class in a private state, but that is true of all .NET classes (and indeed applies elsewhere - eg it's often not hard to usurp the privacy的 C++ 类,但无论哪种方式都没有独立于实现的保证)。 但是几乎总是可以使用反射来弄乱 class ; 封装是一种确保正确性而非安全性的机制。 (但是对哪些代码可以使用反射的安全限制会在较少的保证之上建立安全性)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM