2013-03-04 96 views
7

我有一个部分类,我想要做的东西像下面这样:如何覆盖部分类属性

[MetadataType(typeof(UserMetaData))] 
public partial class Person 
{ 
    public override string PrivateData 
    { 
     get 
     { 
      return customDecrypt(base.PrivateData); 
     } 
     set 
     { 
      base.PrivateData = customEncrypt(value); 
     } 
    } 
} 

上面没有然而工作。

有没有办法重写基本实体框架类的属性,以允许自定义getter/setter?

+0

使用 “公共新字符串PrivateData” 试图http://msdn.microsoft.com/en-us/library/51y09td4(v=vs.71).aspx#vclrfnew_newmodifier – mosca125 2013-03-04 18:00:42

+0

是基类属性定义为'虚拟'? – 2013-03-04 18:03:23

+0

BaseClass定义在哪里?像'公共部分类Person:PersonBase'? – Akku 2013-03-04 18:08:13

回答

21

部分类与继承无关,而override完全是关于继承。

关于类的partial只是意味着它可以在同一个程序集中多次声明。这与将每个partial class的每个部分复制到同一文件并删除partial关键字完全相同。由于不能在同一个类中定义两次相同的属性/函数/等,所以即使使用关键字partial,也不能在同一个类的两个单独部分中定义它两次。

override,另一方面,在派生的类中用于指示它们正在替换它们继承的基类的功能。如果它没有明确地继承,它将继承object,它允许覆盖ToString()(等等)。

你最好的选择,做你想做什么或者使用自定义的T4模板来生成加密/解密逻辑,或者在设计加密属性设置为protectedprivate和手动添加public版本里面做解密。