C#之路:变量
语法:
datatype identifier;
编译器实际是不允许直接使用声明的变量,需要对其进行初始化。
若需要在一条语句中同时声明几个相同类型的变量,需要使用逗号隔开每个变量;同一条语句只能声明同类型的变量。
int i = 10, y = 20;``
int i = 10;
bool y = true;
变量的作用域:
1.只要类在某个作用域内,其字段(成员变量)也在该作用域内
2.局部变量存在于表示声明该变量块语句或方法结束的右花括号之前的作用域内
3.在for、while或类似语句中声明的变量存在于该循环体内
1.局部变量的作用域冲突
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Console;
namespace _1_varSample
{
class Program
{
static void Main(string[] args)
{
for (int i = 0; i < 10; i++)
Write(" "+i);
WriteLine();
for (int i = 9; i >= 0; i--)
Write(" "+i);
}
}
}
0 1 2 3 4 5 6 7 8 9
9 8 7 6 5 4 3 2 1 0
相同的变量在相互独立的循环体内部声明,每个变量i对于各自的循环体来说是局部变量,其作用域仅在该循环体内有效。
Write(" "+i);
与 WriteLine();
的区别:
Write(" "+i);
写入控制台但不换行,WriteLine();
写入控制台换行
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Console;
namespace study1230
{
class Program
{
static void Main(string[] args)
{
int j = 20;
for (int i = 0; i < 10; i++)
{
int j = 30;
WriteLine(i + j);
}
}
}
}
变量 j 的作用域在整个main函数中,且在for循环前定义。此时for循环重复定义 j 变量,编译会出现错误。
A local or parameter named ‘j’ cannot be declared in this scope
because that name is used in an enclosing local scope to define a
local or parameter
2.字段和局部变量冲突
namespace study1230
{
class Program
{
static int j = 20;
static void Main(string[] args)
{
int j = 30;
WriteLine(j);
}
}
}
static int j = 20;
是在类的级别上定义的变量,在类Program删除前是不会超出作用域的。在Main函数定义相同变量的 j ,隐藏了同名类级别的变量,所有程序仍能正常运行。
WriteLine(Program.j);
可以引用类级别的变量
。