C#变量

使用变量可以保存运行时变化的数据。

定义变量

语法

类型名称 变量名1 [=初始值1][,变量名2 =[初始值2]]

类型名称可以是类型的关键字。

同一种类型变量在一行可以定义多个。

其中的=表示的是赋值,将右边的值保存到左边的变量。

初始值一般是一个字面量。

不同类型的字面量表示

整数

整数直接通过数字进行表示。

int i =100, j =200;

整数可以使用0x开头,表示16进制数

int j = 0xff;

整数可以使用0b开头,表示2进制数

int i = 0b1122;

在整数结尾输入L,表示整数是长整型

var i = 100L;

浮点数

浮点数可以直接使用小数形式表示。

double i = 3.14;

单精度浮点数后要加f

float i = 3.14f;

支持科学计数法

double i = 1e50;

小数

小数类型也可以直接用小数或科学计算法表示

decimal i = 3.14,j=1e50;

数字分隔符(C#7.0)

数字之间可以使用_分割

var i = 100_0000;
var j = 1__00.99_88;

字符和字符串

字符使用单引号包裹,字符串使用双引号包裹。

char ch = 'A';
string s  "hello";

定义变量并输出

static void Main(string[] args)
{
    int value = 20;
    string s = "Hello";
    Console.WriteLine(value);
    Console.WriteLine(s);
}

使用变量

定义变量后,可以修改它的值。

语法:

变量 = 值

修改变量的值

static void Main(string[] args)
{
    int value = 20;
    Console.WriteLine(value);
    value = 30;
    Console.WriteLine(value);
}

输出20,30。

变量的作用域

C#只有局部变量和块级作用域。一般情况,变量在脱离语句块时,便无法访问,变量所占用内存被系统回收。

static void Main(string[] args)
{
    int i = 100;

    {
        int j = 200;
    }//在这里脱离j的语句块

    //这里不能访问j
}

static void F()
{
    //这里不能访问i
}

被闭包引用变量的作用域

被闭包引用的局部变量,其作用域会被延长。

using System;

static void Main(string[] args)
{
    Action action = null;

    {
         int i = 100;
         action  => () => Console.WriteLine(action);
    }
    action();//action委托内部访问了变量i,说明i还可以使用。
}

实际上,被闭包引用的局部变量是一个类的字段,不再是局部变量,其生存期至少比闭包引用的方法长。

using System;

static void Main(string[] args)
{
    Action action = null;

    {
        G g = new G();
        g.i = 100;
        action = g.F;
    }
    action();//action委托引用了对象g的方法F,对象g不会被GC
    //此时g可能被回收
}

class G
{
    public int i;

    void F()
    {
        Console.WriteLine(i);
    }
}