Kezdőoldal » Számítástechnika » Hardverek » Mi értelme van annak, hogy c#...

Mi értelme van annak, hogy c# ban egy for-ciklusban deklarált, definiált változó lokális a ciklust tartalmazó blokkra?

Figyelt kérdés

Például:

using System;


public class Test

{

public static void Main()

{

for(int i = 0; i < 5; ++i) {}

int i; //Ez nem jó mert már i létezik.

}

}


Ez az ami érthetetlen számomra:

using System;


public class Test

{

public static void Main()

{

for(int i = 0; i < 5; ++i) {}

int j = i; /* The name `i' does not exist in the current context */

}

}


Miért tették lokálissá ha egyszer nem használhatom?


2014. okt. 21. 00:51
1 2 3
 11/21 anonim ***** válasza:

kérdező ezt értheted félre: "A

ciklusfeltételen belül deklarált ciklusváltozó lokális lesz a ciklust tartalmazó blokkra (vagyis ebben az esetben a

teljes Main függvényre) nézve"


ciklusfeltételen belül = for(int i = 0 ....)

ciklust tartalmazó blokkra = for() {ez a rész}

vagyis ebben az esetben a teljes Main függvényre = ez szerintem rossz

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

feltett kérdés:

using System;


public class Test

{

public static void Main()

{

for(int i = 0; i < 5; ++i) {}

int i; //Ez nem jó mert már i létezik. ITT NYUGODTAN LÉTRE LEHET HOZNI ÉS LE IS KELL FORDULNIA(TELJESEN FÜGGETLEN A for(int i =...)-től

}

}



----------


using System;


public class Test

{

public static void Main()

{

for(int i = 0; i < 5; ++i) {}

int j = i; /* The name `i' does not exist in the current context */ EZ ITT JOGOS HIBA, UGYANIS A i MEGSZŰNT AZ FOR-T LEZÁRÓ } JELNÉL

}

}


Ezek biztosan így működnek, nem 1x használtam már.

2014. okt. 21. 07:57
Hasznos számodra ez a válasz?
 12/21 anonim ***** válasza:

Azért nem értettük, mert ilyenről még nem hallottam! :) Szerintem ez a könyv el van írva. Elég rég c#-oztam de ez nekem is hülyeségnek tűnik.

ennek le kellene fordulnia:

using System;

namespace TestApp

{

class Program

{

static void Main(string[] args)

{

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

{

Console.WriteLine(i);

}

int i = 10; // itt NINCS HIBA

Console.ReadKey();

}

}

}


ez pedig hülyeség:

namespace TestApp

{

class Program

{

static void Main(string[] args)

{

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

{

Console.WriteLine(i);

}

int j = i; // nem fog lefordulni, mert i még nem létezik!

Console.ReadKey();

}

}

}


a mainen belül csak akkor használhatod ha a for ELŐTT létrehozod!

és CSAK a ciklusblokkra lokális! ebből következik, hogy az első az jó!


legalábbis szerintem ez így van. de majd valaki kijavít akinek kicsit frissebb emlékei vannak, ha tévednék.


(kipróbáltad visual stúdióban?)

2014. okt. 21. 08:03
Hasznos számodra ez a válasz?
 13/21 anonim ***** válasza:

*a mainen belül csak akkor használhatod ha a for ELŐTT létrehozod!*


ezt a kijelentésemet kiegészíteném:

tehát ha pedig azt szeretnéd, hogy a teljes mainben az i ugyanazt a változót jelentse (tehát a for ciklus után is dolgozni szeretnél a megnövelt értékével) akkor pedig előtte hozd létre.

2014. okt. 21. 08:06
Hasznos számodra ez a válasz?
 14/21 A kérdező kommentje:

Akkor próbáljátok ki ha nem hisztek nekem.

Az első példát amire azt mondjátok,hogy le kell fordulnia.

Nem fog.Nem fogom leírni mégegyszer.

2014. okt. 21. 18:12
 15/21 A kérdező kommentje:

Előző válaszoló a könyvben jól van írva mert ez amit te írtál nem fordul le:

[link]

A saját szemeddel is láthatod ha bemásolod az ideone.com ba vagy a vs be.


Jól írta a könyv mert ezek szerint valóban lokális nemcsak a ciklus blokkjára hanem a ciklust tartalmazó blokkra is.De miért van ez így ha a használata nem engedélyezett a ciklust tartalmazó blokkban?

2014. okt. 21. 20:00
 16/21 anonim ***** válasza:
Így tervezték a nyelvet. Ha kívül akarok használni egy változót, akkor nekem evidens, hogy nem blokkon belül deklarálom. Ezen kívül célszerű olyan változóneveket adni, amik utalnak a változó tartalmára, így nem egy ciklusszámláló nevével lesznek fémjelezve. Talán azért csinálták így, hogy egy jobb kódolási stílust vegyünk fel, de tényleg zavaró lehet bizonyos esetekben.
2014. okt. 21. 21:32
Hasznos számodra ez a válasz?
 17/21 anonim ***** válasza:

Akkor ezek szerint mi tudtuk rosszul. Ez eléggé furcsa, mert régen használtam a c#-ot de nem emlékszem ilyen problémára. Lehet azért, mert sose próbáltam létrehozni így. Többnyire a for cikluson kívül deklaráltam mindig a változókat és ott csak kinulláztam. pl így: [link]

Ez egyébként teljesen logikátlan, hogy miért nem szűnik meg a változó mikor kilép a ciklusból.

2014. okt. 22. 08:32
Hasznos számodra ez a válasz?
 18/21 anonim ***** válasza:

Mondjuk az is bosszantó, hogy nincs lehetőség "megsemmisíteni" egy változót. Php-ban ott az unset.

C++-ban is van egyszerű megoldás erre a problémára.

[link]

(lehet nem a legjobb, most kezdtem még csak tanulni ezt a nyelvet)

2014. okt. 22. 08:47
Hasznos számodra ez a válasz?
 19/21 anonim ***** válasza:

De ennek semmi értelme. Újradefiniálni nem tudom, használni nem tudom, ott van, és mégsincs. Mi értelme van ennek?

Elég gyakran kell használnom egy blokkon belül 4-5 egyszerű for ciklust, egymás után a ciklusváltozóm meg marad ugyanaz. Minek találjak ki 5 nevet 5 egyszerű ciklusváltozóra?


(Semmi olyat nem csinál az említett ciklus ami miatt indokolt lenne jobban elnevezni, mint "tomb_index".)

2014. okt. 22. 08:51
Hasznos számodra ez a válasz?
 20/21 A kérdező kommentje:
Egy c# mester is írhatna ha akad ezen az oldalon. Hátha ő megtudná mondani.
2014. okt. 22. 18:15
1 2 3

Kapcsolódó kérdések:




Minden jog fenntartva © 2025, 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!