2014-02-15 10 views
16

Ich habe eine Klasse in Model in meinem MVC-Projekt wie folgt.Wenn eine partielle Klasse von einer Klasse erbt, dann sollten alle anderen partiellen Klassen mit demselben Namen dieselbe Basisklasse erben.

public partial class Manager : Employee 
{ 
    public string Name {get;set;} 
    public int Age {get;set;} 
} 

Und diese Klasse habe ich im Ordner App_Code im selben Projekt. Jetzt möchte ich wissen, ob meine Klasse auch von der Employee Klasse oder Not geerbt werden muss?

public partial class Manager 
{ 
    public void SaveEmployee(); 
} 

Ich habe dies zu tun, weil mein Mandant will mir alle Methoden in App_Code Ordner verschieben, die mit Datenbank handelt.

Und ja, beide Klassen teilen sich den gleichen Namensraum.

Antwort

18

Dies ist eine einzelne Klasse definiert über mehrere Deklarationen, nicht zwei verschiedene Klassen. Sie müssen nur das Vererbungsmodell in einer einzigen Erklärung definieren, zB:

public class Foo { } 

//Bar extends Foo 
public partial class Bar : Foo { } 

public partial class Bar { } 

Wenn Sie jedoch die folgenden versuchen würden, würden Sie einen Compiler-Fehler von „Partial Erklärungen‚Bar‘erzeugen darf nicht angeben verschiedene Basisklassen ":

public class Foo { } 

public partial class Bar : Foo { } 

public partial class Bar : object { } 
+0

Sie haben Recht Preston, aber jetzt habe ich ein anderes Problem. Es scheint, dass ich die partielle Klasse nicht vom Modell zum App_Code-Ordner erweitern kann, da ich jetzt einen Fehler erhalte, wenn ich auf die Eigenschaft der Modellklasse zugreife: "Compilerfehler CS1061- Dieser Fehler tritt auf, wenn Sie versuchen, eine Methode aufzurufen oder auf eine Klasse zuzugreifen Mitglied, das nicht existiert. " Aber es funktioniert gut, wenn ich diese beiden Klassen in das Modell einfüge. –

+0

@PrestonGuillot Was ist, wenn Ihre Basis, von der Sie erben, einen Konstruktor hat? Ich kann nicht scheinen, meine partiellen Klassen zu erstellen, ohne den Basiskonstruktor von beiden aufrufen zu müssen, obwohl ich erwarten würde, dass ich nur von einem aus muss. – Chucky

+0

@Chucky Ich weiß nicht genau, worum es geht, ohne den Code zu sehen - es klingt, als wäre es eine neue Frage wert. Konzeptionell bin ich nicht sicher, was Sie meinen, indem Sie "den Basiskonstruktor von beiden aufrufen müssen" - alle Klassen haben einen Konstruktor in C#, wenn Sie eine Klasse erweitern, indem Sie einen neuen Konstruktor bereitstellen und die Basisklasse sicherstellen wollen Konstruktor wird aufgerufen, Sie würden das im Konstruktor der neuen Klasse tun, aber Sie brauchen nur die Konstruktordefinition in einer einzigen Datei einer partiellen Klasse. –

1

Ja, der andere Teil der partiellen Klasse ist immer noch dieselbe Klasse, also erbt er von Employee.

Verwandte Themen