Problem mit vererbten Klassen

Pageman2

Mitglied
Hallo Leute,

ich habe in einer Datei eine Klasse erstellt und eine geerbte Klasse dazu. Jetzt möchte ich gerne auf diese 2 Klassen zugreifen aber ich schaffe das nicht. Kann mir vielleicht einer sagen was ich falsch gemancht habe?

Das sind meine Klassen:

Code:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

/// <summary>
/// Klasse zur Personenverwaltung 
/// </summary>

class Personen
{
   
    
        string name;
        public string _name
        {
            get
            {
                retun(_name);
            }
            set
            {
                _name = value;
            }
        }
}
       class Spieler :Personen 
{
      
            string Nation;
            int Punkte;
            string Gilde;
            
           public string _nation
            {
                get
                {
                    return (_nation);
                }
                set
                {
                    _nation = value;
                }


            }

            public int _Punkte
            {
                get
                {
                    return (_Punkte);
                }
                set
                {
                    _Punkte = value;
                }
            }

            public string _Gilde
            {
                get
                {
                    return _Gilde;
                }

                set
                {
                    _Gilde = value;
                }
            }

       }

Wie kann ich diese jetzt in einen anderen Teil meines Programms verwenden? Ich bin leider noch blutiger Anfänger!

Bitte um eure Hilfe!

Danke Pageman2
 
Prinzipiell solltest du private Member klein schreiben, Properties (Eigenschaften) groß und ohne Unterstrich. Soviel am Rande.

Wie du das aufrufen kannst?
C#:
Spieler mySpieler = new Spieler();
mySpieler._name = "Vorname Nachname";
Wobei hier die Bezeichnung _name bei mir Augenkrebs auslöst.
 
Code:
           public string _nation
            {
                get
                {
                    return (_nation);
                }
                set
                {
                    _nation = value;
                }


            }

            public int _Punkte
            {
                get
                {
                    return (_Punkte);
                }
                set
                {
                    _Punkte = value;
                }
            }

            public string _Gilde
            {
                get
                {
                    return _Gilde;
                }

                set
                {
                    _Gilde = value;
                }
            }

Hrhr. Sehe da schon eine StackOverflowException vor mir. :)

Aufpassen wem du was im set-Block zuweist! In deinem Fall weisst du immer wieder der Eigenschaft den Wert zu. -> Rekursion bis der Stack voll is.. ;)
 
C#:
string name;

public string _name
{
get
{
       retun(name);
}
set
{
       name = value;
}
}
Du wirst sowieso Probleme bekommen. Im Getter und Setter der Properties musst du die Privaten Felder nutzen, nicht das Property an sich (siehe oben).
 
Prinzipiell solltest du private Member klein schreiben, Properties (Eigenschaften) groß und ohne Unterstrich. Soviel am Rande.

Wie du das aufrufen kannst?
C#:
Spieler mySpieler = new Spieler();
mySpieler._name = "Vorname Nachname";
Wobei hier die Bezeichnung _name bei mir Augenkrebs auslöst.

Hi und dank für deine Antwort,

zum ersten habe ich mich bei der Benennung der Variabeln genau an ein Buch gehalten das ich gerade lerne. Werde aber gerne den Unterstrich weglassen und eine andere Variabel verwenden.
Zum zweiten habe ich das Problem das Intelisence mir die Klasse nicht zur Verfügung stellt und ich auch einen Compilerfehler bekomme wenn ich die Klasse aufrufen will.

Kann mir vielleicht einer von euch ein Beispiel zeigen das leicht verständlich ist wie ich eine Klasse richtig erstelle und auch eine geerbte Klasse? Wie es im Moment aussieht hab ich das was in dem Buch steht nicht so wirklich verstanden.

mfg Reinhard
 
Um welches Buch handelt es sich denn? Wäre gut zu wissen, nicht dass es dann einfach weiterempfohlen wird.

Beispiel:

C#:
public class Car
{
  private string name = String.Empty;
  private int highspeed = 0;

  public string Name
  {
    get { return this.name; }
    set { this.name = value; }
  }

  public int Highspeed
  {
    get { return this.highspeed; }
    set { this.highspeed = value; }
  }
}

public class SportCar : Car
{
  private bool formulaOneMotor = false;

  public bool FormulaOneMotor
  {
    get { return this.formulaOneMotor; }
    set { this.formulaOneMotor = value; }
  }
}
Einige verwenden bei privaten Membern (Variablen) einen Unterstrich, um diese eindeutig zu kennzeichnen, aber nie in Eigenschaften verwenden, das erschwert die Lesbarkeit und die Zuordnung. Private Member zudem immer klein schreiben und Methdoen oder Eigenschaften die öffentlich zugreifbar sind immer groß schreiben. Ich persönlich beginne Eigenschaften und Methoden generell mit einem Großbuchstaben.

Weiters ist es anzuraten, jede Klasse in eine eigene Datei zu packen. Dies erhöht die Übersichtlichkeit und deine Klassen sind einfach und schnell zu finden.

Dass Klassen, Methoden etc. im IntelliSense nicht zu finden sind, liegt meist an einem Fehler im Sourcecode, da diese nur angezeigt werden, wenn keine Fehler in der entsprechenden Klasse vorkommen (bei Neuerstellung).

Zusätzlich solltest du auch noch darauf achten, dass Eigenschaften nicht sich selbst befüllen oder sich selbst zurückliefern, daraus resultiert eine StackOverflowException die bereits weiter oben angesprochen wurde, da du somit eine quasi unendliche Rekursion erzeugst.
 
Erstens einmal einen grossen Danke an dich Norbert! Es handelt sich um das Buch "ASP.Net Grundlagen und Profiwissen" von "Patrick A. Lorenz", Habe jetzt endlich verstanden wie das mit den Klassen und der Vererbung funktioniert.

Darf ich noch eine Frage stellen?

Ich habe im Buch über Schnittstellen gelesen auch wie diese erstellt werden aber es war keine Erklärung dabei für was man diese verwenden kann bzw für was die Schnittstellen gut sind. Könntest du mir das vielleicht erklären?

Mfg Pageman2
 
Schnittstellen sind dann gut, wenn unterschiedliche Bibliotheken, Programme etc. miteinander kommunizieren müssen. Schnittstellen beschreiben einen Klassenaufbau, an den sich alle halten müssen. Hierbei ist nicht die tatsächliche Implementierung wichtig, sondern welche Methoden vorgeschrieben sind.

Als Beispiel könntest du dir folgendes vorstellen:
Zu willst einen Server programmieren. Jetzt könnte dir natürlich der Gedanke kommen, dass du dir einen Server entwickelst, der in der Basis immer gleich funktioniert, nur je nach Anwendungsfall eine bestimmte Ausprägung hat (TCP Server, anderes Protokoll, wie auch immer). Daher erstellst du ein Interface, welches beispielsweise vorgibt, dass der Server eine Start und eine Stop-Methode haben muss. Diese muss nun von sämtlichen Implementierungen erfasst werden. D.h. unabhängig davon WIE der Server implementiert wurde und WAS er alles kann, weiß der Entwickler, der es mit dem Server zu tun bekommt, dass er zumindest ein Start und ein Stop hat.
 
Nochmal Danke Norbert! Ok dann brauche ich sicherlich bei meinen Projekt keine Schnittstellen da ich nur eine ASP.net Website erstellen will die eine MS SQL DB enthält die in einem Dataset verarbeitet werden und individuell ausgegeben werden.

Kennst du ein Buch das für Anfänger echt gut geeignet ist? Mit dem Werk das ich jetz hab bin ich nicht sehr zufrieden da es für mich zu schwer geschrieben ist! Bin absoluter Anfänger in .Net und C# aber habe gute Vorkenntnisse in VB6. Leider keinerlei C oder C++ Kenntnise.

mfg Pageman2
 
Zurück