变量/值类型/引用类型/常量/枚举

变量


 声明语法

datatype identifier;

如:
int i; //声明一个int类型的变量,但是在没有初始化之前编译器不允许使用该变量

同时声明多个

int a,b;//同时声明两个int类型的变量

错误示例

int x,bool y;

 备注:如果在 一条语句中声明和初始化了多个变量,那么所有的变量都具有相同的数据类型;声明不同类型的变量,需要使用单独的语句

变量初始化

C#需要使用某个初始化对变量进行初始化,之后才能在操作中引用该变量,C#使用两种方法来确保变量在使用前进行了初始化

  • 变量是类或者结构中的字段,如果没有显示初始化,创建这些变量时,默认值就是.NetFramework类型默认值(引用类型为null,值类型为0)?
  • 方法的局部变量在代码中必须被显式初始化,之后才能使用,否则编译器会产生异常                                                                                                                                                      

C#中实例化一个引用对象需要使用new关键字,把该引用指向存储在堆上的一个对象

类型推断

类型推断使用var关键字,编译器可以根据变量的初始化值""推断"变量的类型,规则如下

  • 变量必须初始化,否则编译器就没有推断变量类型的依据
  • 初始化器不能为空
  • 初始化器必须放在表达式中
  • 不能把初始化器设置为一个对象,除非在初始化器中创建了一个新对象

 

常量

常量是其值在使用过程中不会发生的变量,在声明和初始化变量时,在变量前加上关键字const.就可以把该变量指定为一个常量

常量具有以下特点

  • 常量必须在声明时初始化,指定其值后,就不能改写了
  • 常量的值必须能在编译时用于计算,因此不能从一个变量中提取的值来初始化常量.如果需要,应该使用只读字段
  • 常量总是静态的,但是不必(实际上,是不允许)在常量声明中包含修饰符static

 预定义数据类型

C#中把数据类型分为两种

  • 值类型
  • 引用类型

从概念上看,其区别是值类型直接存储其值,而引用类型存储对值的引用;这两种数据类型存储在内存中的不同地方,值类型存储在堆栈中,而引用类型存储在托管堆中

string str=null; //引用类型可以初始化值为null,表示不引用任何对象 

 如果将引用设置为null,就不能对它调用任何非静态的成员函数或字段,这么做会在运行期间抛异常;CLR会定期删除不能访问的对象,把他们占用的内存返回给操作系统,这是通过垃圾回收器实现的

 

C#中的基本预定义类型并没有内置于C#语言中,而是内置于.NET Framework中,比如声明一个int类型变量时,实际上是声明.NET结构System.Int32的一个实例,这表示在语法上,可以把所有的基本数据类型看成支持某些方法的类,C#中所有的数据类型都以与平台无关的方式定义,以备将来C#和.NET迁移到其他平台上

C#中的预定义值类型主要有:整型/浮点类型/布尔类型/字符类型

  • 整型:C#支持8个预定义整数类型,int/short/byte/long/uint/ushort/sbyte/ulong,C#中所有的整数类型的变量都能被赋予十进制或十六进制的值,后者需要使用0X前缀;如果对一个整数是int/uint/long/ulong没有任何显式的声明,则该变量默认为int类型
  • 浮点类型:float数据类型用于较小的浮点数,因为要求的精度较低,double数据类型比float数据类型大,提供的精度也大一倍;如果在代码中对某个非整数值硬编码,则编译器一般假定该变量是double,如果想指定该值为float,可以在其后加上字符F(或f);C#中提供了一种专用类型进行财务计算,这就是decimal类型,精度上来看:float<double<decimal.要注意的是:decimal类型不是基本类型,所以在计算是可能会存在装/拆箱操作,会有性能损失.要把数字指定为decimal类型,而不是double/float或整型,可以在数字后加上字符M(或m)
  • 布尔类型:bool类型包含值true/false.bool值和整数值不能相互隐式转换
  • 字符类型:为了保存单个字符的值,C#支持char数据类型,表示一个16位的(Unicode)字符,char类型的字面量是用单引号括起来的,如果把字符放在双引号中,编译器会把它们看成字符串,从而产生错误

C#中的预定义引用类型主要有:object/string

  • object:C#中,object是所有类型的基类,所有的内置类型和用户自定义类型都是从它派生而来;可以用object引用绑定任何子类型的对象;object类型实现了一般用途的基本方法,包括Equals()/GetType()/ToString()等常用方法
  • string:String对象被分配在堆上而不是栈上,因此当把一个字符串变量赋予另一个字符串时,会得到内存中对同一个字符串的两个引用,但是string类型与引用类型的常见行为有一些区别,字符串是不可改变的,修改其中一个字符串,就会创建一个全新的string对象,而另一个字符串不发生任何变化
 static void Main(string[] args)
        {
            string a = "1";
            string b = a;
            Console.WriteLine("a:" + a);
            Console.WriteLine("b:" + b);
            a = "2";
            Console.WriteLine("a:" + a);
            Console.WriteLine("b:" + b);
            Console.ReadKey();
        } 
 

    输出:
    a:1
    b:1
    a:2
    b:1  
 
 

 C#中的流程控制语句主要有:If/Switch

 C#中的循环主要有:for/while/do...while/foreach()可以迭代集合中的每一项,要使用集合对象,就必须支持IEnumerable接口.foreach不能改变集合中各项的值


 

枚举

枚举是用户自定义的整数类型,在声明一个枚举时,要指定该枚举的实例可以包含的一组可接受的值.枚举更利于维护,使代码更加清晰.使用时也使得代码更易输入


 

转载于:https://www.cnblogs.com/GnailGnepGnaw/p/10596753.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值