Entwickler-Ecke
C# - Die Sprache - C# Klassen mit mit Parametern
storestore - Do 01.09.11 12:31
Titel: C# Klassen mit mit Parametern
Hallo,
ich habe mal eine Syntax frage zu c#.
Ich habe im Buch: "Visual c# 2010" zum Thema klassen und Methoden die Seiten durchgelsen aber ich habe immer noch eine frage:
Wieso übergebe ich hier die variablen im Paramter nochmal? Ich habe sie doch schon in der klasse definiert:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| class Test { int test;
puplic void variablen(int test;) { } |
Die zweite frage wäre:
Wieso muss ich der Variable bisitzer und sicherheitsebene noch mal den wert bistizer und sicherheitsebene geben? Und wieso mache ich das mit this?
C#-Quelltext
1: 2: 3: 4: 5:
| Public Passierschein (string besitzer, int sicherheitsebene) { this.bisitzer=besitzer; this.sicherheitsebene= sicherheitsebene; } |
mfg storestore
bakachan - Do 01.09.11 13:28
Zu deiner 1. Frage: (ich nehme mal an das Semikolon zu viel ist nur ein Schreibfehler)
Das sind 2 Unterschiedliche Variablen einmal innerhalb der Funktion und einmal innerhalb der Klasse.
Außerdem ist deine in der Klasse deklarierte Variable noch leer (nichts zugewiesen) während beim Parameter beim Funktionsaufruf der Wert übergeben werden muss.
Zur 2. Frage
Das ist quasi wie bei Frage 1. Die Variablen sind lokal deklariert aber bei der Funktion werden Werte als Parameter übergeben. Das ganze wirkt etwas verwirrend weil die gleichen Variablennamen verwendet wurden.
Deswegen auch das
this. davor damit der Compiler weiss das die Klassenvariable gemeint ist und nicht der Parameter der Funktion.
Eine einfache Möglichkeit sowas zu vermeiden ist es eine Kennzeichnung für alle globalen Variablen zu verwenden. (z.B. den Namen aller globaler Variablen mit einem Unterstrich beginnen lassen)
Dann würde es z.B. so aussehen:
C#-Quelltext
1:
| _sicherheitsebene = sicherheitsebene; |
Ralf Jansen - Do 01.09.11 13:30
In beiden fällen gilt nur weil die Bezeichner gleich sind stecken dahinter nicht auch das Gleiche. Im ersten Fall übergibst du einen Parameter mit Namen test der etwas anderes als die Instanzvariable test ist. Wenn man im selben Gültigkeitsbereich zwei Bezeichner hat die nur am Namen nicht unterscheidbar sind muss man den Bezeichner qualifizieren. Bei einer Instanzvariablen kann man das zum Beispiel machen in dem man this davor schreibt somit werden die unterscheidbar von zum Beispiel Parametern wie in deinem 2.ten Codebeispiel gezeigt.
mats74 - Do 01.09.11 13:39
Hallo storestore
Eine Variablendeklaration in irgendeinem Wertebereich hat nicht mit einer Parameterdeklaration einer Methode zu tun.
Dass man eine Variable in einem beliebigen Wertebereich nicht ansprechen kann, liegt an ihrem Gültigkeitsbereich, den man selber festlegen kann.
http://msdn.microsoft.com/de-de/library/aa691132(VS.71).aspx
Somit ist die definierte Variable in einer Klasse nicht gleichzusetzen mit einem Parameter einer Methode:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| public partial class Form1 : Form { string text_1; public Form1() { InitializeComponent(); }
void variablen_1(string text_2) { this.text_1 = text_2; }
void variablen_2(string text_3) { this.text_1 = text_3; } } |
Ich hoffe, dass meine Ausführungen korrekt sind.
Gruss
mats74
storestore - Do 01.09.11 13:52
Ok, vielen Dank. Jetzt habe ich es verstanden!
Frage1: Das sind zwei unterschiedliche Werte. Einmal in der Klasse und einmal als Paramter. Paramtert müssen einen wert zugewiesen bekommen.
Frage2: Der kompiler weiß durch das "this" das es sich nicht um die Paramter sonder um die in der Klassen deklarierten Variable.
Vielen Dank!!! :zustimm:
mfg storestore
:wave:
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!