Autor Beitrag
storestore
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 397
Erhaltene Danke: 7

WIN 7
C#
BeitragVerfasst: Do 01.09.11 12:31 
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:

ausblenden 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?
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
Public Passierschein (string besitzer, int sicherheitsebene)
{
this.bisitzer=besitzer;
this.sicherheitsebene= sicherheitsebene;
}

mfg storestore

_________________
Der Pc ist nur so schlau, wie derjenige der in steuert!
"Don't Quit. Suffer now, and live the rest of your life as a champion"
bakachan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 503
Erhaltene Danke: 34

W7 (x64) Ultimate
C# / VB.NET (VS2010 Ultimate)
BeitragVerfasst: 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:
ausblenden C#-Quelltext
1:
_sicherheitsebene = sicherheitsebene;					

Für diesen Beitrag haben gedankt: storestore
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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.

Für diesen Beitrag haben gedankt: storestore
mats74
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 189
Erhaltene Danke: 26

Win 10
VS 2017/19, C++, C#
BeitragVerfasst: 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.

msdn.microsoft.com/d...aa691132(VS.71).aspx

Somit ist die definierte Variable in einer Klasse nicht gleichzusetzen mit einem Parameter einer Methode:

ausblenden 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

Für diesen Beitrag haben gedankt: storestore
storestore Threadstarter
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 397
Erhaltene Danke: 7

WIN 7
C#
BeitragVerfasst: 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:

_________________
Der Pc ist nur so schlau, wie derjenige der in steuert!
"Don't Quit. Suffer now, and live the rest of your life as a champion"