Uzytkownik "Jon Skeet said:
In what context? You can't use a variable which isn't in scope within
code.
Yes, that is why i can't write:
for(int i=0;i<10;i++){}
Console.Write("{0}",i);
And this I undestood well, but what if I want to check if there is
possiblity to declare class argument int i - only signal for me is compiler
errors ?
I really try but I don't get it (yet
why compiler don't allow me to use
'child' scope variable on this level ?
for(int i=0;i<10;i++){}
int i=0;
This is as you said variable which isn't in scope - 'child' scope is this
for-loop scope..
I don't believe even the debugger will show you a variable out of its
scope.
But there have to be a way to go over this and see what is happening with
this all 'non-used' objects ? I have to go over garbage collector ?
Variables aren't "destroyed", but they will no longer be treated as
being alive by the garbage collector. In other words, just because a
variable comes to the end of its scope doesn't mean that an object it
refers to will immediately be garbage collected, but it means that the
variable will no longer stop if from being garbage collected. (In fact,
when not in debug mode, it's actually after the last use that it's no
longer "used".)
So when I still try to do something like for-loop in which I use i =
iterator, and after that I would like to use int i - new declaration. That
could not be done, becouse of this obcjet already could be somewhere in
memory ? I don't get this idea of "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"
It means you can have, say, a local variable with the same name as an
instance variable.
Ok, so why my int i; isn't instance variable ??
No - you should read onto the next sentence:
<quote>
(This does not, however, remove the restriction imposed by Section 3.3
that within a nested block it is not possible to declare a local
variable with the same name as a local variable in an enclosing block.)
</quote>
I was thinking about something like this
for(int i=0;i<10;i++){ do sth A..}
for(int i=10;i>0;i--){ do sth B..}
And this works well, both 'child' scopes are using the same name for
variable and there is no errors, so another time I ask -> why class variable
(I think instance ?) isn't allowed as well ?
Not sure what you're after here. Names are just names - by the time
everything's compiled there may still be a mapping of name to (eg)
member location or place in the stack for a local variable, but unless
you're using reflection, the runtime itself won't be using that map
much.
I was wondering how my previous thing works, if I have two declarations of
int i - there must be a way to forget about this first name and make another
object for second 'i' - and why the same thing couldn't be done for int i -
not in local for-loop scope but at class level.
I really try to understood this... really..