如何重写部分类属性
本文关键字:分类 属性 重写 何重写 | 更新日期: 2023-09-27 18:02:03
我有一个局部类,我想做如下的事情:
[MetadataType(typeof(UserMetaData))]
public partial class Person
{
public override string PrivateData
{
get
{
return customDecrypt(base.PrivateData);
}
set
{
base.PrivateData = customEncrypt(value);
}
}
}
上面的方法不起作用。
是否有一种方法来覆盖基本实体框架类的属性,以允许自定义getter/setter?
部分类与继承无关,override
完全是关于继承的。
类上的partial
关键字仅仅意味着它可以在同一个程序集中多次声明。这就像你把每个partial class
的每个部分都复制到同一个文件中,然后去掉partial
关键字一样。因为你不能在同一个类中定义相同的属性/函数等两次,所以你不能在同一个类的两个不同的部分中定义它两次,即使使用partial
关键字。
override
在派生的类中使用,以表明它们正在替换它们继承的基类的功能。如果它没有显式继承,它继承自object
,这允许您覆盖ToString()
(以及其他)。
您最好的选择是使用自定义T4模板来生成加密/解密逻辑,或者在设计器中将加密属性设置为protected
或private
,并手动添加public
版本来进行解密。
如果您可以更改代码生成器,您可以使用非常强大的部分方法轻松地"模拟"它("覆盖"默认值)。
https://msdn.microsoft.com/en-us/library/wa80x488.aspx虽然您不能覆盖实体框架基类,但有一个解决办法。在.edmx模型中(首先是DB,如果是代码,直接在实体中),在你想要"重写"的属性上,将Getter/Setter更改为private并重命名该属性。然后使用公共名称创建带有属性的部分类,这将不再发生冲突。
在公共部分类属性中,如果需要,您将能够访问私有重命名属性。