Re: Nochmal Klassenprogrammierung
From: Karsten Beck (Karsten.Beck_at_foto-beck.de)
Date: 11/23/04
- Next message: Armin Schaefer: "Re: Logfile Eintrag in DateTime parsen"
- Previous message: Frank Dzaebel: "RE: String von HTML bereinigen"
- In reply to: Arne Schittenhelm: "Re: Nochmal Klassenprogrammierung"
- Next in thread: Arne Schittenhelm: "Re: Nochmal Klassenprogrammierung"
- Reply: Arne Schittenhelm: "Re: Nochmal Klassenprogrammierung"
- Messages sorted by: [ date ] [ thread ]
Date: Tue, 23 Nov 2004 02:01:27 +0100
Habe die notwendigen Änderungen mit /*BEGIN*/ und /*END*/ gekennzeichnet.
public class ClassA : ClassErr
{
public ClassA() {}
/*BEGIN*/
public ClassB cb;
public ClassA()
{
this.cb = new ClassB( this);
}
/*END*/
public void TuWas()
{
LastError = 1;
}
}
public class ClassB
{
/*BEGIN*/ ClassErr errorObject;
public ClassB(ClassErr errorObject)
{
this.errorObject = errorObject;
}
/*END*/
public void Irgendwas()
{
// Fehler: Der Name 'LastError' besteht nicht in der Klasse oder
dem Namespace 'testClass.Class1.ClassB'
/*BEGIN*/
this.errorObject.LastError = 2;
/*END*/
}
}
public class ClassErr
{
private int error = 0;
public int LastError
{
get
{
return this.error;
}
set
{
this.error = value;
}
}
}
Du willst ganz einfach auf die Instanz von ClassA und dort speziell auf
LastError von der Instanz der ClassB aus zugreifen. Dafür musst Du einfach
die *Instanz* der ClassA in ClassB bekannt machen. Das macht man hier am
besten, in dem man diese Instanz ("this") dem Konstruktor von ClassB
übergibt. Das geschieht praktischerweise im Konstruktor von ClassA.
Ich habe für den Typen des Konstruktor-Parameters von ClassB statt "ClassA"
hier den allgemeineren Type "ClassErr" verwendet. Man sollte immer den
allgemeineren Typ verwenden, damit das später leichter wiederverwendbar ist.
So kann man ClassB auch mit anderen Ableitungen von ClassErr verwenden.
Der Fehler war, dass in ClassB keinerlei Referenz auf ClassA oder ClassErr
bekannt ist, deswegen darf man auch nicht auf das Property "LastError"
zugreifen, ClassB kennt ja schließlich nix davon. Damit man auch tatsächlich
den Wert von LastError bekommt, der zu der konkreten Instanz von ClassA
gehört, muss man eine Referenz auf diese Instanz an die Instanz der ClassA
übergeben. Geschieht jetzt im Konstruktor und alles ist gut...
Ciao
Karsten
<Arne Schittenhelm> schrieb im Newsbeitrag
news:qdg4q0h5akt72974ljkrqvb17hlgmn56v5@4ax.com...
> On Mon, 22 Nov 2004 16:29:31 +0100, Lars Steinmetz
> <lars.steinmetz@nurfuerspam.de> wrote:
>
>>Ich verstehe eigentlich gar nicht, was du vor hast. Poste doch mal
>>_konkret_ was dein Begehr ist...
>
> Ich habe zwei Klassen. Klasse Lager und Klasse Items. Items und deren
> Methoden sollen über Lager.Items verfügbar sein. Dazu habe ich Items
> in Lager referenziert. Das Problem besteht nun darin, dass ich in der
> Klasse Lager Eigenschaften habe, die auch in Items verfügbar sein
> sollen (sowohl public als auch private). Ich habe auch schon versucht
> Lager von Items abzuleiten. Dann habe ich zwar nicht das Problem mit
> dem Zugriff auf die Eigenschaften, dafür sind dann die Methoden von
> Items direkt über Lager.Methoden erreichbar was auch nicht Sinn der
> Sache ist. Egal wie ich es drehe oder wende irgendwo ist ein Haken :-(
- Next message: Armin Schaefer: "Re: Logfile Eintrag in DateTime parsen"
- Previous message: Frank Dzaebel: "RE: String von HTML bereinigen"
- In reply to: Arne Schittenhelm: "Re: Nochmal Klassenprogrammierung"
- Next in thread: Arne Schittenhelm: "Re: Nochmal Klassenprogrammierung"
- Reply: Arne Schittenhelm: "Re: Nochmal Klassenprogrammierung"
- Messages sorted by: [ date ] [ thread ]
Relevant Pages
|