2013-03-04 2 views
7

außer Kraft zu setzen habe ich eine partielle Klasse, und ich möchte so etwas wie die folgenden Funktionen ausführen:Wie eine partielle Klasse Eigenschaft

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

den oben jedoch nicht funktioniert.

Gibt es eine Möglichkeit zum Überschreiben der Basis-Entity-Framework-Klassen ihre Eigenschaften für benutzerdefinierte Getter/Setter zu ermöglichen?

+0

versuchen "public neue Zeichenfolge Private" mit http://msdn.microsoft.com/en-us/library/51y09td4(v=vs.71).aspx#vclrfnew_newmodifier – mosca125

+0

ist die Basisklasse Eigenschaft definiert als 'virtuell'? –

+0

Wo ist die BaseClass-Definition? Wie 'öffentliche partielle Klasse Person: PersonBase'? – Akku

Antwort

21

Partielle Klassen haben nichts mit Vererbung zu tun, und override ist vollständig über Vererbung.

Das Schlüsselwort partial einer Klasse bedeutet nur, dass es in derselben Baugruppe mehrfach deklariert werden kann. Es ist genau so, als ob Sie jeden Teil jeder partial class in dieselbe Datei kopiert und das Schlüsselwort partial entfernt hätten. Da Sie dieselbe Eigenschaft/Funktion/etc nicht zweimal in derselben Klasse definieren können, können Sie sie nicht zweimal in zwei separaten Teilen derselben Klasse definieren, auch nicht mit dem Schlüsselwort partial.

override, auf der anderen Seite wird in abgeleiteten Klassen verwendet, um anzuzeigen, dass sie die Funktionalität der Basisklasse sind zu ersetzen, aus denen sie erben. Wenn es nicht explizit erbt, erbt es von object, wodurch Sie ToString() (unter anderem) überschreiben können.

Ihre besten Möglichkeiten zu tun, was Sie wollen, sind entweder eine benutzerdefinierte T4-Vorlage zu verwenden, um die Verschlüsselung/Entschlüsselung Logik zu erzeugen, oder die verschlüsselten Eigenschaften protected oder private im Designer zu setzen und manuell hinzufügen public Versionen, die die Entschlüsselung zu tun .