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: