优秀的编程知识分享平台

网站首页 > 技术文章 正文

学习笔记之C#基础——变量与常量(变量和常量c语言)

nanyue 2024-11-12 11:46:56 技术文章 1 ℃

学习笔记之C#基础——变量与常量

变量本身被用来存储特定类型的数据,可以根据需要随时改变变量中所存储的数据值。变量具有名称、类型和值。变量名是变量在程序源代码中的标识。变量类型确定它所代表的内存的大小和类型,变量值是指它所代表的内存块中的数据。在程序的执行过程中,变量的值可以发生变化。使用变量之前必须先声明变量,即指定变量的类型和名称。

声明变量

C#声明变量是由一个数据类型和后面跟一个或多个变量名组成。

<data_type> <variable_list>;

例如:

int a,b,c; char ch; float f;

变量的初始化(赋值)

C#中使用“="符号来进行赋值,将等号右边的值赋值给左边的变量。

变量可以在声明的同时初始化,例如:

int a=3; float f=3.1;

变量也可以在声明之后再赋值,例如:

int b,c; b=5; c=b;

变量的作用域

C#变量一般分为”成员变量“和”局部变量“。”成员变量“是在类中声明的,可以供整个类访问。局部变量在方法体类声明的变量,只在方法内部可以访问。作用域如下图所示:

成员变量又分为实例变量和静态变量。静态变量在声明时在变量类型前加上static。静态变量的有效范围可以跨类,甚至可达到整个应用程序之内。对于静态变量,除了能在定义它的类内存取,还能直接以“类名.静态变量”的方式在其他类内使用。

class oneclass { int a; //实例变量 static float b; //静态变量 }

数据类型

C#中的变量类型根据其定义可以分为两种:一种是值类型;另一种是引用类型。这两种类型的差异在于数据的存储方式,值类型的变量本身直接存储数据。而引用类型则存储实际数据的引用,程序通过此引用找到真正的数据。

值类型变量主要包含整数类型、浮点类型以及布尔类型等。值类型变量在栈中进行分配。值类型是从System.ValueType类继承而来的类型。

  • 整数类型:
  • 浮点类型:
  • 布尔类型:布尔类型主要用来表示true和false值,一个布尔类型的变量,其值只能是true或者false。

引用类型是构建C#应用程序的主要对象类型数据。在应用程序执行的过程中,预先定义的对象类型以new创建对象实例,并且存储在堆中。堆是一种由系统弹性配置的内存空间,没有特定大小及存活时间,因此可以被弹性地运用于对象的访问。多个引用类型变量可以引用同一对象,这种情形下,对一个变量的操作会影响另一个变量所引用的同一对象。

class oneclass
{
    class Childclass
    {
        public int val=0;    
    }
    static void Main(string[] args)
    {
    int a=0;
    int b=a;
    b=110;
    Childclass cc1=new Childclass();
    Childclass cc2=cc1;
    cc2.val=119;
    Console.WriteLine("Values:{0},{1}",a,b);
    Console.WriteLine("Ref:{0},{1}",cc1.val,cc2.val);
    Console.ReadLine();      
    }
}

运行的结果如下:

由上面的例子可以看出,声明cc2时将cc1赋值给了cc2,后面修改cc2.val的值为119,最后输出cc1.val和cc2.val都是119。这里cc1.val跟着cc2.val变化了。原因就是,引用类型包含的是堆上的数据区域地址的引用,所以在声明cc2并将cc1赋值给它(Childclass cc2=cc1),此时是将cc1的引用给了cc2,也就是cc1和cc2同时指向了堆上的同一数据区域地址,所以不论修改cc1还是cc2,其实都是修改的同一个数据地址的值,从而另一个的值也跟着变化了。

枚举类型是一种独特的值类型,它用于声明一组具有相同性质的常量。

enum week
{
Sun=0,
Mon=1,
Tue=2,
Wed=3,
Thu=4,
Fri=5,
Sat=6
}

类型转换

类型转换就是将一种类型转换成另一种类型,转换可以是隐式转换,也可以是显式转换。

隐式转换就是不需要声明就能进行的转换。

可以进行隐式转换的数据类型表如下:

显式转换也可以称为强制转换,需要在代码中明确地声明要转换的类型。如果要把高精度的变量的值赋给低精度的变量,就需要使用显式转换。

装箱和拆箱

将值类型转换为引用类型的过程叫作装箱,相反,将引用类型转换为值类型的过程叫作拆箱。

     static void Main(string[] args)
    {
        int a = 101;
        Object b = a;//装箱操作
        Console.WriteLine("值变量a:{0},装箱后对象b:{1}", a, b);
        a = 111;
        Console.WriteLine("值变量修改后a:{0},此时对象b:{1}", a, b);
        Console.ReadLine();
    }

运行结果:

运行结果可以看出,值类型变量的值复制到装箱得到的对象中,装箱后改变值类型变量的值,并不会影响装箱对象的值。

class Program
{

    static void Main(string[] args)
    {
        int a = 101;
        Object b = a;//装箱操作
        Console.WriteLine("装箱操作:值变量a:{0},装箱后对象b:{1}", a, b);
        int c = (int)b;
        Console.WriteLine("拆箱操作:装箱后对象b:{0},拆箱到值变量c:{1}", b, c);
        Console.ReadLine();
    }
}

运行结果:

运行结果,不难看出,拆箱后得到的值类型数据的值与装箱对象相等。需要读者注意的是,在执行拆箱操作时要符合类型一致的原则,否则会出现异常。

常量

常量就是其值固定不变的量,而且常量的值在编译时就已经确定了。常量的类型只能为下列类型之一:sbyte、byte、short、ushort、int、uint、long、ulong、char、float、double、decimal、bool、string等。C#中使用关键字const定义常量,并且在创建常量时必须设置它的初始值。

 const double pi = 3.1415; 
const char ch = 'a';

Tags:

最近发表
标签列表