Kezdőoldal » Számítástechnika » Programozás » Miért van az, hogy C#-ban az...

Wakeupjohnny kérdése:

Miért van az, hogy C#-ban az i = 20 mindkét változatban fordítási hibát eredményez?

Figyelt kérdés

static void Main(string[] args)

{

for (int i = 0; i < 10; i++)

{

Console.WriteLine(i);

}

int i = 20;

}

---------------------------------------------------------

static void Main(string[] args)

{

for (int i = 0; i < 10; i++)

{

Console.WriteLine(i);

}

i = 20;

}


2012. okt. 11. 11:10
 1/4 iostream ***** válasza:

A második eset tiszta: nincs deklarálva i a scopeban.

Az elsőnél meg a hibaüzenet segíthet. Nincs előttem C# fordító, de gyanítom valami olyasmit mond, hogy unused variable.

2012. okt. 11. 12:40
Hasznos számodra ez a válasz?
 2/4 A kérdező kommentje:

Első (int i = 20):

A local variable named 'i' cannot be declared in this scope because it would give a different meaning to 'i', which is already used in a 'child' scope to denote something else

Második (i = 20):

The name 'i' does not exist in the current context

2012. okt. 11. 13:30
 3/4 anonim ***** válasza:

Bár az első logikus lenne, a gond ezzel lenne elméletben:


int i = 20;

for (int i = 0; i < 10; i++)

{

Console.WriteLine(i);

}

Mivel i-t felüldefiniálnád a ciklusban.


Viszont a compilert egyszerűen úgy írták meg, és azt a szabályt hozták hogy az számít, hogy melyik scopeban van a változó, azaz itt a Main scopeban deklarált változót egy gyerek scopejában újradeklarálsz, még akkor is ha ez utána van.


Defnícó erre vonatkozóan:

"For each occurrence of a given identifier as a simple-name in an expression or declarator, within the local variable declaration space of that occurrence, every other occurrence of the same identifier as a simple-name in an expression or declarator must refer to the same entity. This rule ensures that the meaning of a name is always the same within a given block, switch block, for-, foreach- or using-statement, or anonymous function."


Tehát hiába van a for után a deklaráció, ez ugyanúgy a Main scopehoz tartozik, mintha a for előtt lenne, ezért dobja a hibát.


Persze lehetne okosabb a fordító, de egyszerűen nem akartak ezzel bajlódni gondolom.

2012. okt. 11. 16:24
Hasznos számodra ez a válasz?
 4/4 A kérdező kommentje:
koszonom szepen!
2012. okt. 11. 21:57

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!