{}隔离变量

作者:vkvi 来源:ITPOW(原创) 日期:2007-6-14

变量具有一定的作用域,在 VBScript 中表现不明显,而在 C# 中表现格外明显。

除了函数内、类内等作用域外,{} 也可以将变量作用域隔开。


void Page_Load(object sender, EventArgs e)
{
    {
       string str = "123";
    }
    lb.Text = str; //出错
}

对于 lb.Text = str 来说,它所处的块及父块没有定义 str,它无法引用子块所定义的 str(string str = "123";),所以会出错。


void Page_Load(object sender, EventArgs e)
{
    {
        string str = "123";
    }
    {
        lb.Text = str; //出错
    }
}

对于 lb.Text = str 来说,它所处的块及父块没有定义 str,它无法引用兄弟块所定义的 str(string str = "123";),所以会出错。


void Page_Load(object sender, EventArgs e)
{
    string str = "abc";
    {
       string str = "123"; //出错
    }
    lb.Text = str;
}

string str = "123"; 具有父块(其 {} 以外,函数以内),在父块中定义了 str(string str = "abc";),由于不能重复定义父块中的变量,所以会出错。


void Page_Load(object sender, EventArgs e)
{
    {
        string str = "123";
    }
    string str = "abc"; //出错
    lb.Text = str;
}

string str = "abc"; 子块已经先于父块定义了 str(string str = "123";),由于不能重复定义子块中的变量,所以会出错。


void Page_Load(object sender, EventArgs e)
{
    {
        string str = "123";
    }
    {
        string str = "abc";
    }
}

两句 str 定义所处的块是兄弟关系,没有错误发生。


总结

  • 子块定义 var,父块不能使用该 var,父块不能再定义 var。
  • 父块定义 var,子块可以使用该 var,子块不能再定义 var。
  • 兄弟块定义 var,兄弟块不能使用该 var,兄弟块可以再定义 var。

再浓缩一下

兄弟块完全隔离,子块与父块之间定义不隔离,使用上半隔离(子块可以使用父块定义的变量,父块不能使用子块定义的变量)


说明

  • 以上所说的块,限定于一个函数之内,如果函数之外定义了全局变量,函数内仍可以定义局部变量。
  • {} 并不一定要位于 if、for 等语句之后,可以单独存在。
相关文章