Entwickler-Ecke
C# - Die Sprache - Der Name "Bezeichner" ist im aktuellen Kontext nicht vor...
R1N0XCU53 - So 31.07.11 18:28
Titel: Der Name "Bezeichner" ist im aktuellen Kontext nicht vor...
Hallo alle Community Mitglieder,
mein Problem ist, dass ich noch Anfänger in C# bin und deswegen kleinere Probleme mit der Syntax habe.
Also folgendes:
Ich habe 3 Klasse. Ich möchte von der einen Klasse "Ash" auf eine Variable "ashx" der anderen Klasse "Hintergrund" zugreifen. Doch ich bekomme immer die Fehlermeldung "Der Name "hintergrund" ist im aktuellen Kontext nicht verfügbar"
Hier mal der relevante Code:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| namespace Spiel { public class Maingame : Microsoft.Xna.Framework.Game { Hintergrund hintergrund; Ash ash;
protected override void Initialize() { hintergrund = new Hintergrund(); ash = new Ash(); base.Initialize(); } } |
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| namespace Spiel { class Ash { public void Update(GameTime gameTime) { if (Keyboard.GetState().IsKeyDown(Keys.Down)) { hintergrund.ashy++; } } } } |
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| namespace Spiel { public class Hintergrund { public int ashx = 13; public int ashy = 25; } } |
Ich hab's schon damit versucht die Variablen u.a. als static zu deklarieren, aber prinzipiell muss ja möglich sein von der einen Klasse auf die Variablen der anderen Klasse zu zugreifen. Ich habe es auch schon mit der Online Hilfe probiert, aber wie im Beispiel habe ich die Variable nicht in einem if oder sonstigem Block initialisiert:
http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=DE-DE&k=k%28CS0103%29&rd=true
Vielen Dank schon im Voraus!
Th69 - Mo 01.08.11 09:51
Hallo und :welcome:
dir scheint die Objektorientierung noch nicht ganz klar zu sein. Für den Zugriff auf einen Membervariable benötigst du ein Objekt (genauer: eine Referenz auf ein Objekt) dieser Klasse.
Du könntest der Klasse Ash eine Referenz auf das eigene Maingame-Objekt mitgeben:
und dann in der Klasse Ash eine Referenz darauf in einer Membervariablen halten (alternativ: eine Eigenschaft dafür deklarieren).
Schöner (bzw. professioneller) und getreu dem Motto "Trennung von GUI und Logik" ist es besser ein Ereignis von der Klasse Ash aus zu werfen, s.a. mein Artikel dazu:
Kommunikation von 2 Forms [
http://www.bitel.net/dghm1164/programming/Kommunikation_von_2_Forms.html] (bzw. zwischen Form und Klasse).
R1N0XCU53 - Mo 01.08.11 11:50
Vielen Dank erstmal,
mein Problem ist, dass das fertige Programm schon in Processing geschrieben ist, ich es aber 3D fähig machen will und deswegen in C# jetzt schreibe.
Ich kann mir denken wie die Lösung so ungefähr aussehen soll, hab hier auch ein Code-Beispiel gefunden, das zeigt aber leider wie die Variable an eine Methode weitergegeben wird. Ich will aber einfach nur den Wert der Variable verändern.
http://www.buha.info/board/showpost.php?p=365057&postcount=4
Hast du evt. ein Code Beispiel?
Ralf Jansen - Mo 01.08.11 12:37
Zitat: |
aber prinzipiell muss ja möglich sein von der einen Klasse auf die Variablen der anderen Klasse zu zugreifen |
Ja, aber du willst die Variablen einer bestimmten Instanz der Hintergrund Klasse ändern und damit müssen sich die konkreten Ash und Hintergrund Instanzen kennen.
Dazu kannst du einfach z.B. der Ash Klasse einen Verweis auf die konkrete Hintergrund Klasse verpassen. Zum Beispiel über den Konstructor (oder eine Property, Event etc.).
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| class Ash { private Hintergrund _hintergrund;
public Ash(Hintergrund hintergrund) { _hintergrund = hintergrund; } public void Update(GameTime gameTime) { if (Keyboard.GetState().IsKeyDown(Keys.Down)) { _hintergrund.ashy++; } } } |
In der Initialize Methode müsstest du dann eben den Konstructor von Ash enstprechend aufrufen um die 2 Klassen zu 'verdrahten'.
C#-Quelltext
1:
| ash = new Ash(hintergrund); |
R1N0XCU53 - Di 02.08.11 23:31
Vielen Dank hat geklappt! :)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!