2012-04-11 9 views
0

Bitte Betrachten Sie dieses Szenario:Wie einige von propery der übergeordneten Klasse erben

Wir haben eine Basisklasse clsMain genannt:

class clsMain 
{ 
    int P1{set; get;} 
    int P2{set; get;} 
    int P3{set; get;} 
    string P4{set; get;} 
    string P5{set; get;} 
} 

und ich möchte diese 2 obejcts von clsMain haben:

object1 psudo code: 
{ 
    int P1{set; get;} 
    int P2{set; get;} 
    int P3{set; get;}  
} 

und:

object2 psudo code: 
{ 
    int P3{set; get;} 
    string P4{set; get;} 
    string P5{set; get;} 
} 

ist es in C# möglich? Soll ich bestimmte Klassen verwenden (abstrakt, ...)?

Dank viel

+0

wollen Sie, dass die Klassen diese Eigenschaften nur haben? – Tigran

+0

Tigrans Antwort unten sieht wirklich gut für mich aus. – Dhananjay

Antwort

1

Vererbung ist möglich in C# als First-Class-Konzept:

public class BaseClass 
{ 
    public virtual string Name { get { return "Adam"; } } 
} 

public class ChildClass : BaseClass 
{ 
    public override string Name { get { return "Foo"; } } 
} 

Um override etwas , müssen Sie es virtual machen und muss Zugriff auf etwas anderes als private haben.

In Ihrem Fall Sie möglicherweise so etwas wie tun könnten:

class clsMain 
{ 
    public virtual int P1{set; get;} 
    public virtual int P2{set; get;} 
    public virtual int P3{set; get;} 
    public virtual string P4{set; get;} 
    public virtual string P5{set; get;} 
} 

class object1 : clsMain 
{ 
    public override int P1{set; get;} 
    public override int P2{set; get;} 
    public override int P3{set; get;}  
} 

class object2 : clsMain 
{ 
    public override int P3{set; get;} 
    public override string P4{set; get;} 
    public override string P5{set; get;} 
} 

Obwohl, wenn ich ehrlich bin zu sein, ist Ihre Frage nicht ganz klar. Beachten Sie jedoch, dass C# keine mehrfache Vererbung von Klassen unterstützt.

Klingt, als ob Sie die Eigenschaften herausfiltern möchten. Sie können nicht verhindern, dass geerbte Mitglieder aufgerufen werden (nun, es gibt den Modifikator new, aber das ist bestenfalls skizzenhaft). Stattdessen können Sie Schnittstellen verwenden:

interface Iobject1 
{ 
    int P1 { set; get; } 
    int P2 { set; get; } 
    int P3 { set; get; } 
} 

interface Iobject2 
{ 
    int P3{set; get;} 
    string P4{set; get;} 
    string P5{set; get;} 
} 

class clsMain : Iobject1, Iobject2 
{ 
    public int P1{set; get;} 
    public int P2{set; get;} 
    public int P3{set; get;} 
    public string P4{set; get;} 
    public string P5{set; get;} 
} 
+0

danke liebe @Adam Houldsworth. aber wenn ich Objekt basierend auf Objekt2 erstellen sehe ich 'clsMAin' Eigenschaften. Ich möchte eine Sache wie Sql anzeigen – Arian

+0

@Kerezo Sie können Mitglieder nicht ausblenden. Stattdessen können Sie Schnittstellen erstellen, die nur die gewünschten Mitglieder verfügbar machen und stattdessen mit der Schnittstelle kommunizieren. –

0

Ihre Frage ist nicht klar ... Sie können nicht von 2 Objekt in C#

erben Wenn Sie clsMain wollen alle Eigenschaften von object1 und object2 herited haben, was Sie können, zu tun ist:

  • object2 erben von object1
  • clsMain von object2
erben

So hat clsMain alle Eigenschaften von object1 und object2

Mit abstract schützen Sie die Klasse vor der direkten Erstellung. Wenn Sie object1 als abstrakt setzen, werden Sie nie "var x = new object1();"

EDIT: Ich habe vergessen zu sagen, dass Eigenschaften geschützt oder öffentlich sein müssen, sonst sind sie nicht von der abgeleiteten Klasse zugänglich.

1

In diesem Fall in der Basisklasse leave nur gemeinsame Eigenschaften, wie dieser Pseudo-Code:

class clsMain 
{ 
    int P3{set; get;} 
} 

class object1 : clsMain 
{ 
    int P1{set; get;} 
    int P2{set; get;} 
} 

class object2 : clsMain 
{  
    string P4{set; get;} 
    string P5{set; get;} 
} 
+0

@ downvoter: vorsichtig erklären? – Tigran

+0

war ich nicht, aber ich vermute, dass es war, weil Ihr veröffentlichter Code C# nicht gültig ist. –

+1

@AdamHouldsworth: der ursprüngliche Code war nicht zu :) so folgte ich nur dem gleichen Konzept .. bah. Die Frage ist konzeptionell, so die Antwort auch .. – Tigran

Verwandte Themen