Announcement

Collapse
No announcement yet.

Objekteigenschaften

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Objekteigenschaften

    Hallo,<br>
    ich habe für mich sehr merkwürdiges Problem.<br>
    Erstmal der code:<br>
    <pre>
    <font face="Verdana" size="1" color="#000000">[Serializable]
    public class TSerProperty
    {
    internal string FTown;
    internal string FStreet;
    internal int FNumber;

    public TSerProperty(string aTown, string aStreet, int aNumber)
    {
    this.FTown = aTown;
    this.FStreet = aStreet;
    this.FNumber = aNumber;
    }

    public string Town
    {
    get {return FTown;}
    set {FTown=value;}
    }
    public string Street
    {
    get {return FStreet;}
    set {FStreet=value;}
    }
    public int Number
    {
    get {return FNumber;}
    set {FNumber=value;}
    }
    }
    [Serializable]
    public class TSer
    {
    internal string FFirstname;
    internal string FLastname;
    internal int FAge;

    public TSer()
    {
    <b>TSerProperty SerProp = new TSerProperty("0","0",0);
    </b> }

    public TSerProperty SerProp

    public string Firstname
    {
    get {return FFirstname;}
    set {FFirstname=value;}
    }
    public string Lastname
    {
    get {return FLastname;}
    set {FLastname=value;}
    }
    public int Age
    {
    get {return FAge;}
    set {FAge=value;}
    }
    }</font>
    </pre>
    Die Objekte selber haben eigentlich keine Bedeutung (brauche ich nur um das [Serializable] Attribute zu testen)<br>
    In TSer habe eine Eigenschaft vom Type TSerProperty deklariert. im constructor von TSer wird auch eine Instanz <br>
    erzeugt. Aber jetzt kommt's:<br>
    <pre>
    private void btnCreate_Click(object sender, System.EventArgs e)
    {
    TSer SerObj = new TSer();
    SerObj.Firstname="Paul";
    SerObj.Lastname="Schmitt";
    SerObj.Age=56;
    SerObj.SerProp.Town="München";
    SerObj.SerProp.Street="Am Markt";
    SerObj.SerProp.Number=1;
    IFormatter formatter = new BinaryFormatter();
    formatter.Serialize(FFilestream, SerObj);
    }
    </pre>
    Die direkte Zuweisung SerObj.SerProp.Town="München"; erzeugt einen Fehler.<br>
    <b>Eine nicht behandelte Ausnahme des Typs 'System.NullReferenceException' ist in Serial1.exe aufgetreten<br>
    Zusätzliche Informationen: Der Wert 'null' wurde gefunden, als eine Objektinstanz erforderlich war.</b><br>
    Erst mit SerObj.SerProp = new TSerProperty("München","Am Markt",1); lassen sich die<br>
    Felder von SerObj.SerProp setzen. Warum erhalte ich den Fehler, obwohl im constructor von<br>
    TSer SerObj erzeugt wird ?<br>
    Jens Schumann<br>

  • #2
    Hallo Jens,

    das Problem liegt in der Zeile

    TSerProperty SerProp = new TSerProperty("0","0",0);
    im Konstruktor von TSer()

    Hier wird eine zusätzliche, lokale Variable SerProp deklariert,
    das eigentliche Klassenmitglied SerProp bleibt unangetastet null.

    hth
    Holge

    Comment


    • #3
      Hallo Holger,<br>
      vielen Dank das war es. Neulich habe ich im dot.net Magazin im Interview mit Michael Wiedeking gelesen "... , dass die Syntax einer Sprache so ziemlich das unwichtigste überhaupt ist. ... " Z.Z. habe ich aber das Gefühl, dass das genau der Punkt mir die meisten Schwierigkeiten macht.
      <br>Jens Schuman

      Comment

      Working...
      X