myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Grundlagen von C# » Wie kann ich Werte per Referenz in eine andere Klasse übergeben?
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Wie kann ich Werte per Referenz in eine andere Klasse übergeben?

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
ayykaramba ayykaramba ist männlich
myCSharp.de-Mitglied

Dabei seit: 18.10.2020
Beiträge: 10


ayykaramba ist offline

Wie kann ich Werte per Referenz in eine andere Klasse übergeben?

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo zusammen,

ich bin gerade dabei mich mit einem Fachbuch in C# einzuarbeiten und mache gerade ein Übungsprojekt in dem ich Tetris programmieren möchte. Ich habe Probleme mit dem übergeben per Referenz von Variablen. Im Fachbuch ist ein Beispiel das innerhalb der gleichen Klasse funktioniert, aber wie verhält sich das, wenn ich den Wert in eine andere Klasse übergebe?

Ich habe die Klasse Form1 und die Klasse Bausteinform1. Nun möchte ich in Form1 die Methode erstellen() von Bausteinform1 aufrufen und hierbei eine Variable aus Form1 mitliefern. Diese Variable wird in der Methode erstellen() verändert und der veränderte Wert soll nun auch für die Originalvariable von Form1 gelten.

Im folgenden ist eine vereinfachte Darstellung wie ich es probiert habe. Mit einem return möchte ich hier nicht arbeiten, da ich nicht nur int variablen verändern möchte sondern auch panels mitliefere.

C#-Code:
public partial class Form1:Form
{
public int variable = 0;

Bausteinform1 neueBausteinform1 = new Bausteinform1();
neueBausteinform1.erstellen(ref variable);
}

C#-Code:
class Bausteinform1:Form1
{


public void erstellen(int variable)
{
variable++;
}
}

Kann mir jemand sagen was ich falsch mache?
Es wird mir der Fehler "Das Argument 1 kann nicht mit dem Schlüsselwort "ref" übergeben werden"

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von ayykaramba am 18.10.2020 17:12.

18.10.2020 17:08 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Th69
myCSharp.de-Poweruser/ Experte

avatar-2578.jpg


Dabei seit: 01.04.2008
Beiträge: 3.810
Entwicklungsumgebung: Visual Studio 2015/17


Th69 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo und willkommen,

dazu mußt du auch bei dem Methodenparameter ref voranstellen, damit klar ist, daß du auch ref beim Aufruf angeben mußt:

C#-Code:
public void erstellen(ref int variable)

(selbiges gilt auch analog für out-Parameter).

PS: Soll Bausteinform1 wirklich eine eigenständige Form-Klasse sein (weil du davon erbst)? Ein Tetris-Baustein ist doch nur ein Control (z.B. ein Panel, PictureBox o.ä.).

PPS: Und bitte packe deinen Code in passende Code-Tags (mit dem c#-Button).

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Th69 am 18.10.2020 17:30.

18.10.2020 17:28 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
MrSparkle MrSparkle ist männlich
myCSharp.de-Team

avatar-2159.gif


Dabei seit: 16.05.2006
Beiträge: 5.572
Herkunft: Leipzig


MrSparkle ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

18.10.2020 17:38 Beiträge des Benutzers | zu Buddylist hinzufügen
ayykaramba ayykaramba ist männlich
myCSharp.de-Mitglied

Dabei seit: 18.10.2020
Beiträge: 10

Themenstarter Thema begonnen von ayykaramba

ayykaramba ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

danke dir. Das ist wohl der Unterschied zur Referenz innerhalb einer Klasse!

zu deinem PS:
Meine Tetris Bausteine bestehen aus jeweils 4 gleich großen Panels die je nach Bausteinform anders angeordnet sind (wie beim originalen Tetris). Der Grund warum ich eine Vererbung hier gemacht habe ist, dass ich nach Initialisierung der Panel Eigenschaften (Location, Size) in Bausteinform1 die Panels zu Controls von Form1 hinzufügen möchte.

C#-Code:
Control.Add(p0);
Control.Add(p1);
Control.Add(p2);
Control.Add(p3);

ohne die Vererbung hat das bei mir nicht geklappt. Auch nicht mit Form1.Controls.Add(p0);
Aber das vermutlich wieder ein Anfängerfehler von mir? Was spricht denn gegen eine Vererbung hier?
18.10.2020 17:48 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Th69
myCSharp.de-Poweruser/ Experte

avatar-2578.jpg


Dabei seit: 01.04.2008
Beiträge: 3.810
Entwicklungsumgebung: Visual Studio 2015/17


Th69 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Vererbung ja, aber eben nicht von Form (das stellt ja ein komplett eigenständiges Fenster mit Rahmen und Titelleiste dar), sondern von eines der Controls (also z.B. Panel, wenn du die Bausteine selber zeichnen möchtest, wie in  [Tutorial] Zeichnen in Windows-Forms-Programmen (Paint/OnPaint, PictureBox) beschrieben).
18.10.2020 18:17 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als ein Monat.
Der letzte Beitrag ist älter als ein Monat.
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 05.12.2020 23:59