2013-03-04 68 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版本里面做解密。