Discussion:
Zugriff auf übergeordnete Klasse
(zu alt für eine Antwort)
Sylvio Laemmerhird
2007-04-19 15:18:30 UTC
Permalink
Hi,

ich habe ein Problem ;-)

und zwar habe ich eine Klasse, die Teil einer anderen Klasse ist. In
einer Methode/Funktion dieser untergeordneten Klasse, muß ich ein
Propertie der der Eltern-Klasse wissen.
Wie greife ich als, von einer Unterklasse auf die Elternklasse zu?

Thanks!
Frank Dzaebel
2007-04-19 16:04:07 UTC
Permalink
Hallo Sylvio,
ich habe eine Klasse, die Teil einer anderen Klasse ist. In
einer Methode/Funktion dieser untergeordneten Klasse, muß ich ein
Propertie der der Eltern-Klasse wissen.
Wie greife ich als, von einer Unterklasse auf die Elternklasse zu?
Du meinst vermutlich die deklarierende Klasse:

class MeineKlasse
{
public MeineKlasse()
{
MessageBox.Show(this.GetType().DeclaringType.FullName);
}
}

Falls nicht, noch einmal genauer benennen.
Vielleicht meinst Du auch die Basisklasse.
Dann ggf.: GetType().DeclaringType.FullName.


ciao Frank
--
Dipl. Inf. Frank Dzaebel [MCP, MVP C#]
http://Dzaebel.NET
Frank Dzaebel
2007-04-19 16:12:01 UTC
Permalink
Post by Frank Dzaebel
Falls nicht, noch einmal genauer benennen.
Vielleicht meinst Du auch die Basisklasse.
Dann ggf.: GetType().DeclaringType.FullName.
Korrektur, hier meinte ich: GetType().BaseType.FullName


ciao Frank
--
Dipl. Inf. Frank Dzaebel [MCP, MVP C#]
http://Dzaebel.NET
Sylvio Laemmerhird
2007-04-19 19:34:40 UTC
Permalink
"Frank Dzaebel" <PostAddFranksSeitePunktDe> schrieb
eher sowas

MessageBox.show( Button1.Parent.Size.Width.ToString );

bei Controls geht sowas, wie abr bei selbstdeklarierten Klassen?
Herfried K. Wagner [MVP]
2007-04-19 21:31:20 UTC
Permalink
Post by Sylvio Laemmerhird
eher sowas
MessageBox.show( Button1.Parent.Size.Width.ToString );
bei Controls geht sowas, wie abr bei selbstdeklarierten Klassen?
Wie definierst du "übergeordnete Klasse"?
--
M S Herfried K. Wagner
M V P <URL:http://dotnet.mvps.org/>
V B <URL:http://dotnet.mvps.org/dotnet/faqs/>
Frank Dzaebel
2007-04-20 10:10:03 UTC
Permalink
Hallo Sylvio,
Post by Sylvio Laemmerhird
eher sowas
Ja, dann ist die Lösung wie ich sagte.

Falls es für Dich noch nicht gelöst ist,
würde ich gern ein exaktes
kleines Codebeispiel haben, bei dem
Du Du angibst, welchen Member Du
gern aus welcher Klasse heraus haben
möchtest. Die Lösung poste ich Dir dann dazu.
Post by Sylvio Laemmerhird
MessageBox.show(Button1.Parent.Size.Width.ToString );
bei Controls geht sowas, wie abr bei selbstdeklarierten Klassen?
Ja, das geht dort über die Parent-Eigenschaft, aber das
ist ja wieder etwas anderes. Du hast ja nicht generell
eine Parent-Eigenschaft in jeder Klasse.


ciao Frank
--
Dipl. Inf. Frank Dzaebel [MCP, MVP C#]
http://Dzaebel.NET
Christof Nordiek
2007-04-20 13:15:30 UTC
Permalink
Post by Sylvio Laemmerhird
MessageBox.show( Button1.Parent.Size.Width.ToString );
bei Controls geht sowas, wie abr bei selbstdeklarierten Klassen?
Das Control hat eben eine Parent-Eigenschaft. Diese wird automatisch
gesetzt, wenn das Control zu einem Container hinzugefügt wird.
Das könnte natürlich auch ein Ansatz für dein Problem sein. Die
Untergeordnete Klasse hat ein Feld vom Typ der Übergeordneten Klasse.
Dieses Feld wird zugewiesen, wenn die Untergeordente Klasse der
Obergeordneten Klasse hinzugefügt wird.

HDH
Christof
Johann Schwarz
2007-04-29 13:27:11 UTC
Permalink
... > Dieses Feld wird zugewiesen, wenn die Untergeordente Klasse der
Post by Christof Nordiek
Obergeordneten Klasse hinzugefügt wird.
Hallo ! Ich denke probiers mal z.B so
<code>
public class MyClass{
private Control _owner;

public MyClass(Control owner)
{
_owner = owner;
}
....
}
//wenn die 'ParentClsse ein Control ist
//ansonsten
private Object _owner;
public MyClass(Object owner)
{ _owner = owner;
}
oder wenn die Parent class bekannt ist

private MyParentClass _owner;
public MyClass(MyParentClass owner)
{
_owner = owner;
}

// initialisiert wird das ganze in der Parentclass dann etw so
private MyClass child = new MyClass(this);
</code>
Ich hoffe das passt so, bin noch sehr neu in C#

Johann Schwarz
Johann Schwarz
2007-04-30 21:15:41 UTC
Permalink
Post by Johann Schwarz
... > Dieses Feld wird zugewiesen, wenn die Untergeordente Klasse der
Post by Christof Nordiek
Obergeordneten Klasse hinzugefügt wird.
Hallo ! Nochwas fällt mir zu dem Thema ein ( vor kurzem aufgeschnappt in einem Buch über C# )
Wenn du eine Komponente ( also nicht ein Usercontrol ) dazu bringen willst, daß der Designer automatisch soetwas wie den parent an der Komponente anmeldet also die Form auf die Komponente gesetzt wird, so geht das so
<code>
[Browsable(false)]

public Form HostingForm

{

get

{

// dadurch setzt der Designer eine TextZeile wie etwa

// this.myComponent1.HostingForm = this; in den text von InitializeComponent ein

if (hostingForm == null && this.DesignMode)

{

IDesignerHost designer = this.GetService(typeof(IDesignerHost)) as IDesignerHost;

if (designer != null)

{

hostingForm = designer.RootComponent as Form;

}

}

return hostingForm;

}

set

{

if (!this.DesignMode)

{

// Die Host Form darf zur Laufzeit nicht geändert werden

if ((hostingForm != null) && (hostingForm != value))

{

throw new InvalidOperationException("Kann die HostForm zur Laufzeit nicht setzen");

}

}

else

{

hostingForm = value;

}

}

}

</code>Vielleicht ist das das was Du brauchst ?



Gruß aus wien

Johann

Stefan Offermann
2007-04-20 07:06:09 UTC
Permalink
Hallo Sylvio!
Post by Sylvio Laemmerhird
ich habe ein Problem ;-)
Hmm, das kenne ich auch irgendwie ;)
Post by Sylvio Laemmerhird
und zwar habe ich eine Klasse, die Teil einer anderen Klasse ist.
d.h. Klasse A besitzt ein Objekt der Klasse B als Member, ja?

public class A {
private B b;

public Property Prop {
get { ... }
}
}
Post by Sylvio Laemmerhird
In
einer Methode/Funktion dieser untergeordneten Klasse, muß ich ein
Propertie der der Eltern-Klasse wissen.
Also willst du in Klasse B auf sagen wir mal das Property "Prop" in
Klasse A, der 'Elternklasse', zugreifen, ja?
Post by Sylvio Laemmerhird
Wie greife ich als, von einer Unterklasse auf die Elternklasse zu?
Dann müsste die Klasse B, um ihr 'Elternteil' zu kennen ja eine Referenz
auf diese halten, diese könntest zu bei der Erzeugung der Klasse B ja
mitgeben:

public class B {
private A elternteil;

public B(A a)
elternteil = a;
}
}

Dann kannst du in Methoden der Klasse B auf das Propertie deiner
sogenannten "Elternklasse" A zugreifen:

// In Klasse B
public void DoSmth() {
elternteil.Prop.ToString();
}

Warum eigentlich der Begriff "Elternklasse"? Sind A und B Teil einer
Baumstruktur oder ähnlichem?

HTH, Stefan
--
student of geoinformatic

ifgi - institute for geoinformatics
www.ifgi.de
Sylvio Laemmerhird
2007-04-20 07:32:48 UTC
Permalink
Post by Stefan Offermann
Also willst du in Klasse B auf sagen wir mal das Property "Prop" in
Klasse A, der 'Elternklasse', zugreifen, ja?
Jo, richtig, Du hast es erfasst ;-)
Post by Stefan Offermann
Warum eigentlich der Begriff "Elternklasse"? Sind A und B Teil einer
Baumstruktur oder ähnlichem?
so ähnlich - es ist eben eine Klasse dessen Eigenschaften wieder aus
einer anderen Klasse besteht, so wie ein Form mehrere Controls hat.

Button1.Parent.Size.Width.ToString

Ungewöhnlich ist, das man in der Unterklasse ist, aber keinen Zugriff
auf die Oberklasse hat.
Ich will einfach die Eigenschaften der Unterklasse in einem
Propertygrid ändern, aber dazu brauche ich auch noch ein Property der
Oberklasse.
Herfried K. Wagner [MVP]
2007-04-20 13:58:41 UTC
Permalink
Hallo Sylvio!
Post by Sylvio Laemmerhird
Post by Stefan Offermann
Also willst du in Klasse B auf sagen wir mal das Property "Prop" in
Klasse A, der 'Elternklasse', zugreifen, ja?
Jo, richtig, Du hast es erfasst ;-)
Das glaube ich nicht, denn deine Beispiele mit der Eigenschaft deuten immer
in eine andere Richtung.
Post by Sylvio Laemmerhird
Post by Stefan Offermann
Warum eigentlich der Begriff "Elternklasse"? Sind A und B Teil einer
Baumstruktur oder ähnlichem?
so ähnlich - es ist eben eine Klasse dessen Eigenschaften wieder aus einer
anderen Klasse besteht, so wie ein Form mehrere Controls hat.
Button1.Parent.Size.Width.ToString
Ungewöhnlich ist, das man in der Unterklasse ist, aber keinen Zugriff auf
die Oberklasse hat.
Was meinst du mit Unterklasse und Oberklasse? Du meinst, wenn Typ 'B' von
'A' erbt, dann sollte man innerhalb von 'A' auf 'B' zugreifen können? Das
wäre nicht möglich, denn von 'A' können mehrere Typen abgeleitet werden.
--
M S Herfried K. Wagner
M V P <URL:http://dotnet.mvps.org/>
V B <URL:http://dotnet.mvps.org/dotnet/faqs/>
Masterchief
2007-04-20 10:49:16 UTC
Permalink
Hy!

Ich glaube er meint Container Klasse oder :-)

Ronny
Post by Sylvio Laemmerhird
Hi,
ich habe ein Problem ;-)
und zwar habe ich eine Klasse, die Teil einer anderen Klasse ist. In
einer Methode/Funktion dieser untergeordneten Klasse, muß ich ein
Propertie der der Eltern-Klasse wissen.
Wie greife ich als, von einer Unterklasse auf die Elternklasse zu?
Thanks!
Michael v. Fondern
2007-04-20 16:41:12 UTC
Permalink
Post by Sylvio Laemmerhird
und zwar habe ich eine Klasse, die Teil einer anderen Klasse ist. In
einer Methode/Funktion dieser untergeordneten Klasse, muß ich ein
Propertie der der Eltern-Klasse wissen.
Wie greife ich als, von einer Unterklasse auf die Elternklasse zu?
Das Problem ist, das du die Begriff Eltern-Klasse, Unterklasse und "Teil
einer Klasse" nicht so verwendest, dass wir hier nachvollziehen können,
wie du das genau meinst, und in welchen Beziehungen die Objekte deiner
Klassen wirklich zueinander stehen.

Redest du von
- Vererbung?
- geschachtelten Klassen?
- ein Objekt der Klasse A, welches eine *Instanz* der Klasse B beinhaltet?
- statischen Propertys?

Poste doch mal ein wenig Code, dann kann dir sicher geholfen werden.

Grüße

- MIchael -
Johann Schwarz
2007-04-29 13:52:59 UTC
Permalink
Post by Michael v. Fondern
Post by Sylvio Laemmerhird
und zwar habe ich eine Klasse, die Teil einer anderen Klasse ist. In
einer Methode/Funktion dieser untergeordneten Klasse, muß ich ein
Propertie der der Eltern-Klasse wissen.
Wie greife ich als, von einer Unterklasse auf die Elternklasse zu?
Das Problem ist, das du die Begriff Eltern-Klasse, Unterklasse und "Teil
einer Klasse" nicht so verwendest, dass wir hier nachvollziehen können,
wie du das genau meinst, und in welchen Beziehungen die Objekte deiner
Klassen wirklich zueinander stehen.
Redest du von
- Vererbung?
- geschachtelten Klassen?
- ein Objekt der Klasse A, welches eine *Instanz* der Klasse B beinhaltet?
- statischen Propertys?
Hallo Michael, hallo Sylvio !

Also ich denke mal, er hat eine Klasse A die er in Klasse B verwendet etwa
so

public class A
{
...... was immer

}

public class B
{
private B _myB = new(B);

}
</code>
Und will nun von B auf properties von A zugreifen. Wenns so ist dann mein
vorheriger Posz , wenns Vererbung ist und er will von den abgeleiteten
Klassen auf die Base zugreifen ist das ja mit protected fields kein Problem,
denke ich. Von der Base aus allerdings auf die abgeleiteten Klassen
zugreifen ?? Ich denke das könnte, wenn überhaupt, nur mit Reflekion
gehen. Aber das ist glaube ich ziemlich komplex und da wäre doch zu
überlegen, wozu das ganze nötig ist und ob es da nicht vom Konzept her einen
ganz anderen Ansatz gibt. Je nachdem was man machen will. Interfaces z,B.

Grüße aus Wien

Johann Schwarz
Lesen Sie weiter auf narkive:
Loading...