none
auf Funktionen in übergeordneten Klassen zugreifen. RRS feed

  • Frage

  • Ich habe in meinem Spiel mit dem XNA Framework in der Game1.cs eine Funktion. Ich möchte in meiner 2. Klasse (Klasse.cs), die mit 

    klasse = new Klasse(/*Parameter*/);

    eingebunden habe auf die Funktion in der Game1.cs zugreifen. Wie mache ich das?


    Sonntag, 3. April 2011 18:01

Antworten

  • M.,

    Letztlich musst Du den Namespace von Game1 eben entweder davorschreiben, oder mit using oben deklarieren.

    Hier eine genauere Beschreibung:

    [Compilerfehler CS0246]
    http://msdn.microsoft.com/de-de/library/w7xf6dxs.aspx

    Wenn Assembly, in der Game1 implementiert ist, sichtbar ist (ggf. über Verweise eingebunden), reicht normal ein

         STRG+Punkt  [Enter]

    im Visual Studio C# Editor aus, zur automatischen Erzeugung des using-statements aus.

     


    ciao Frank
    • Als Antwort markiert Mansent Montag, 4. April 2011 16:37
    Montag, 4. April 2011 16:17

Alle Antworten

  • Hallo M.,

    XNA Foren sind eigentlich eher woanders, aber da Du jetzt eine allgemeine C# Frage stellst ....

    Antwort:
    Es kommt vielleicht noch ein wenig auf die Schachtelung und die Sichtbarkeit etc. an, aber im Allgemein gibt es (u.a.) folgende Standards.... :
    - Benötigte andere Klasseninstanzen zum Beispiel über Konstruktor übergeben.
    - In eine öffentliche Eigenschaft.
    - In eine Eigenschaft einer öffentlichen statischen Klasse kapseln und von dort abrufen, je nach Singleton-Sematik.
    - und viele weitere Möglichkeiten.
    - Heutzutage oft auch über DI (und z.B. MEF) auto-importiert.

    [guide to C# | Guide | Klassen und Strukturen]
    http://www.guidetocsharp.de/Classes.aspx

    [game development - Content Manager in another class XNA - Stack Overflow]
    http://stackoverflow.com/questions/2391055/content-manager-in-another-class-xna


    ciao Frank
    Sonntag, 3. April 2011 18:44
  • Danke für dis schnelle Antwort.

    Wie könnte das dann praktisch aussehen, wenn ich in der Game1.cs diese Funktion habe und in der Klasse.cs darauf zugreifen will:

    public int x ()
    {
     return 5;
    }
    

    Sonntag, 3. April 2011 19:06
  • Hi,

    es ist grundsätzlich egal wo sich die klassen befinden in einem projekt. Daher hier einfach mal ein kleines Beispiel

    // Customer.cs
    public class Customer{
     
     public String FirstName {get; set;}
     public String LastName {get; set;}
    
     public String Name{
      get{ return String.Format("{0}, {1}", this.LastName, this.FirstName);
     }
    }
    
    //Printer.cs
    public class Printer{
     
     public void PrintCustomer(){
      var customer = new Customer(){
        FirstName = "Andrew",
        LastName = "Smith"
      };
      Console.WriteLine(customer.Name);
     }
    }
    

     

    Beantwortet dies deine Frage?


    Es soll Fälle geben, in denen die Suche bereits die Antwort auf deine Frage weiß.
    Sonntag, 3. April 2011 19:43
  • Hallo M.,

    • Wie könnte das dann praktisch aussehen [...]

    nun, ich habe ja jetzt viele Vorschläge gemacht.

    Du nennst nun eine Methode und keine Eigenschaft, aber ok, das geht auch.

    Ein ganz simples Beispiel, wie man darauf zugreift (hier einfach über eine Instanziierung der Klasse) :

    namespace XNADemo
    {
      public class Game1
      {
        public int X()
        {
          return 5;
        }
      }
    
      public class Klasse
      {
        public Klasse()
        {
          Game1 g1 = new Game1();
          System.Console.WriteLine(g1.X());
        }
      }
    }
    

    ciao Frank
    Sonntag, 3. April 2011 20:03
  • Hallo Thorsten,

    • es ist grundsätzlich egal wo sich die klassen befinden in einem projekt. ...

    da sollte man etwas mit der Pauschalierung aufpassen, ein C# Architekt würde sich jetzt verhemend gegen diese Aussage ausprechen ;-)
    Was Du meinst ist ja, bezüglich der Kompilierung (ACK) - das sollte dann dazugesagt werden, wenn schon nicht zitiert wird.

    Ansonsten ordnet man die Klassen natürlich schon in seinem Projekt gemäß Zugehörigkeiten.
    Ich sage es nur noch mal dem OP, damit das nicht falsch verstanden wird.

     


    ciao Frank
    Sonntag, 3. April 2011 20:21
  • Hallo Thorsten,

    • es ist grundsätzlich egal wo sich die klassen befinden in einem projekt. ...

    da sollte man etwas mit der Pauschalierung aufpassen, ein C# Architekt würde sich jetzt verhemend gegen diese Aussage ausprechen ;-)
    Was Du meinst ist ja, bezüglich der Kompilierung (ACK) - das sollte dann dazugesagt werden, wenn schon nicht zitiert wird.

    Ansonsten ordnet man die Klassen natürlich schon in seinem Projekt gemäß Zugehörigkeiten.
    Ich sage es nur noch mal dem OP, damit das nicht falsch verstanden wird.

     


    ciao Frank
    Hi Frank, Ja stimmt den Satz haett ich streichen koennen :D Thx fuer den Hinweis Thorsten
    Es soll Fälle geben, in denen die Suche bereits die Antwort auf deine Frage weiß.
    Montag, 4. April 2011 04:56
  • Ich weiß nicht wieso, aber es klappt nicht:

     

    Fehler:

    Der Typ- oder Namespacename "Game1" konnte nicht gefunden werden. (Fehlt eine Using-Direktive oder ein Assemblyverweis?)

     

    Brauche ich dafür noch eine spezielle using-Anweisung?

    Montag, 4. April 2011 14:05
  • M.,

    Letztlich musst Du den Namespace von Game1 eben entweder davorschreiben, oder mit using oben deklarieren.

    Hier eine genauere Beschreibung:

    [Compilerfehler CS0246]
    http://msdn.microsoft.com/de-de/library/w7xf6dxs.aspx

    Wenn Assembly, in der Game1 implementiert ist, sichtbar ist (ggf. über Verweise eingebunden), reicht normal ein

         STRG+Punkt  [Enter]

    im Visual Studio C# Editor aus, zur automatischen Erzeugung des using-statements aus.

     


    ciao Frank
    • Als Antwort markiert Mansent Montag, 4. April 2011 16:37
    Montag, 4. April 2011 16:17
  • Vielen Dank, das hats gebracht.

     

    Jetzt funktionierts!

    Montag, 4. April 2011 16:37