Re: Nochmal Klassenprogrammierung

Tech-Archive recommends: Fix windows errors by optimizing your registry

From: Karsten Beck (Karsten.Beck_at_foto-beck.de)
Date: 11/23/04


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 :-(



Relevant Pages

  • Nochmal Klassenprogrammierung
    ... dass ich aus Klasse B auf die Methode LastError() zugreifen möchte. ... public class ClassA: ClassErr ... public ClassB cb = new ClassB; ...
    (microsoft.public.de.german.entwickler.dotnet.csharp)
  • Re: Some thoughts about OO programming
    ... compilers, that try to make code as machine friendly as possible (with ... Alpha designs a class named ClassA. ... Company Beta wants to write a class ClassB. ... libraries are loaded by the dynamic linker of the OS and it ...
    (comp.programming)
  • Problems loading assembly using System.Reflection.assembly
    ... ClassA is going to be used for multable apps so I ... ClassB inherits ClassA. ... Dim returnObject As Object ... Dim asm As System.Reflection.Assembly ...
    (microsoft.public.dotnet.framework)
  • Problems loading assembly using System.Reflection.assembly
    ... ClassA is going to be used for multable apps so I ... ClassB inherits ClassA. ... Dim returnObject As Object ... Dim asm As System.Reflection.Assembly ...
    (microsoft.public.dotnet.languages.vb)
  • Re: Can anyone help with proper use of operator CType in VB.net?
    ... public ClassA: inherits Base ... I have an instance of ClassA and ClassB and I'm trying to assign the ... Public Overrides Sub Assign ...
    (microsoft.public.dotnet.languages.vb)