C#基础:关键字和数据类型

[关键字]

 #region 和 #endregion 关键字可以折叠代码
 checked 用于整型算术运算时控制当前环境中的溢出检查
 unchecked 操作符用于整型算术运算时控制当前环境中的溢出检查
 default 可在 switch 语句或泛型代码中使用
 abstract 应用于抽象类中,与override连用
    注意:抽象类使用方法:1.不能创建抽象类的实例(其中的类不允许给出实现)
                                      2.不能在抽象类外声明抽象方法
                                      3.不能被声明为封装
           4.抽象类中未必有抽象方法,抽象方法必须存在于抽象类中
           
 as 用于在兼容的引用类型之间执行转换,类似于强制转换,所不同的是,当转换失败时,
    运算符将产生空,而不是引发异常
    注意:as 运算符只执行引用转换和装箱转换。as 运算符无法执行其他转换,如用户定
    义的转换
   
 base 用于从派生类中访问基类的成员:
    (1)调用基类上已被其他方法重写的方法。
    (2)指定创建派生类实例时应调用的基类构造函数。
    注意:1.基类访问只能在构造函数、实例方法或实例属性访问器中进行。
   
 catch 用于捕获程序中的异常,与try连用
 
 delegate 委托让我们可以把函数引用保存在变量中。这就像在 C++ 中使用 typedef 保存函数指针
    一样。委托使用关键字 delegate 声明,应用于代理中
    附:代理的分类:(1)单播代理:一次仅调用一个方法;(2)多播代理:一次可同时
    调用多个方法,要求所有代理的返回值都相同且为void
   
 event 声明一个全新的事件
 
 explicit 用于声明必须使用强制转换来调用的用户定义的类型转换运算符
 
 extern 用于声明在外部实现的方法,extern 修饰符的常见用法是在使用 Interop 服务调入非托
    管代码时与DllImport属性一起使用,在这种情况下,还必须将方法声明为 static
   
 finally 用于在程序中,无论异常是否被抛出,都要执行的一个给定的语句集,try块后面finally
    不是必需的
   
 fixed fixed语句禁止垃圾回收器重定位可移动的变量。fixed语句只能出现在不安全的上下文中,
    fixed还可用于创建固定大小的缓冲区。fixed语句设置指向托管变量的指针,并在执行该
    语句期间“固定”此变量。如果没有fixed语句,则指向可移动托管变量的指针的作用很小,
    因为垃圾回收可能不可预知地重定位变量。C# 编译器只允许在fixed语句中分配指向托管
    变量的指针。可以用数组或字符串的地址初始化指针, 只要指针的类型相同,就可以初始
    化多个指针执行完语句中的代码后,任何固定变量都被解除固定并受垃圾回收的制约。因
    此,不要指向fixed语句之外的那些变量。无法修改在 fixed 语句中初始化的指针。
   
 foreach 专门用来读取集合中的所有元素,将数组中的元素逐一取出,并且输出到控制台
    注意:1.借用foreach的语法,只能一一取得数组中的元素,没有办法利用这种语句改变
    数组中所存储的元素
       2.使用语句时,类型必须与所要操作的数组相同
 get 取得数组中的元素
 
 implicit 用于声明隐式的用户定义类型转换运算符。如果可以确保转换过程不会造成数据丢失,则
    可使用该关键字在用户定义类型和其他类型之间进行隐式转换。
   
 in 上下文关键字可在下面两种上下文中使用:
    (1)foreach 语句 ;(2)查询表达式中的 join 子句
 
 interface 用于声明接口
    注意:1.接口在实现时不需要加override
       2.类和接口最大的区别:类不可以多重继承,而接口可以多重继承
       3.一个类可以实现多个接口,但不可以有多个基类
       4.接口限制(1)不允许在接口中包含任何字段,包括static
        (2)不允许在接口中包含任何构造函数
        (3)类的缺省访问区分符为internal,在类中默认为private,在接口中
          默认为public
        (4)不允许在接口中嵌套任何类型
        (5)不允许从class或struct中继承一个接口
        (6)接口可以声明方法,函数,属性,不能在接口中声明变量
 internal 访问区分符,使得类能够向其他函数和对象展示其成员变量和成员函数。任何声明为internal
    的成员可以从定义了该成员的应用程序定义的类或方法访问它。类的缺省访问区分
    符为internal
 is 检查对象是否与给定类型兼容。如果所提供的表达式非空,并且所提供的对象可以强制转
    换为所提供的类型而不会导致引发异常,则is表达式的值是true; 否则为false. 如果已知
    表达式将始终是 true 或始终是 false,则 is 关键字将导致编译时警告,但是,通常在
    运行时才计算类型兼容性。
    注意(1)is 运算符只考虑引用转换、装箱转换和取消装箱转换。不考虑其他转换,如
       用户定义的转换。
     (2)不能重载 is 运算符。
     (3)在 is 运算符的左侧不允许使用匿名方法。lambda 表达式属于例外。
 lock 可确保当一个线程位于代码的临界区时,另一个线程不会进入该临界区。如果其他线程试
    图进入锁定的代码,则它将一直等待(即被阻止),直到该对象被释放。
    注意:1.lock 关键字在块的开始处调用 Enter,而在块的结尾处调用 Exit。
      2.通常,应避免锁定 public 类型,否则实例将超出代码的控制范围。 常见的结构
      lock (this)、lock (typeof (MyType)) 和 lock ("myLock") 违反此准则:
      (1)如果实例可以被公共访问,将出现 lock (this) 问题。
      (2)如果 MyType 可以被公共访问,将出现 lock (typeof (MyType)) 问题。
      (3)由于进程中使用同一字符串的任何其他代码都将共享同一个锁,所以出现
      lock(“myLock”) 问题。 最佳做法是定义 private 对象来锁定, 或 private
      static 对象变量来保护所有实例所共有的数据。
 
 new 在 C# 中,new 关键字可用作运算符、修饰符或约束。
    (1)new 运算符 :用于创建对象和调用构造函数。
    (2)new 修饰符 :用于向基类成员隐藏继承成员。
    (3)new 约束   :用于在泛型声明中约束可能用作类型参数的参数的类型。
   
 object object类提供了所有类共同的基本属性,方法和行为
 
 operator 使用 operator 关键字来重载内置运算符,或提供类或结构声明中的用户定义转换。
    注意:带要被重载的操作符的operator关键字被用作函数名称
   
 out 声明输出参数,利用引用来传递,不要求在调用方法前对被传递的参数初始化
    注意:若要使用 out 参数,方法定义和调用方法都必须显式使用 out 关键字。
 
 override 与abstract(抽象类)或virtual(虚函数)连用,不与interface(接口)连用
 params 可以指定在参数 数目可变处 采用参数 的 方法参数。
    注意:在方法声明中的 params 关键字之后不允许任何其他参数,并且在方法声明中只允
    许一个 params 关键字。
   
 partial 分部类型定义允许将类、结构或接口的定义拆分到多个文件中。
 
 private 访问区分符,,private访问区分符能够隐藏其成员变量和成员函数,是其他类对象和函数
    不能访问它们,在类之外不能看到类的专用成员,仅该类的函数才能访问它们,即使类的
    实力也不能访问其专用成员
 protected 访问区分符,能够隐藏其成员变量和成员函数,从而其他的类对象和函数(出了其子类)
    不能访问它们
 public 使类能够向其他函数和对象显示其成员变量和成员函数,可以从类的外部访问它
 
 readonly 表示这个字段只能在执行构造函数的过程中赋值,或由初始化赋值语句赋值,
     可以在字段上使用的修饰符。当字段声明包括 readonly 修饰符时,该声明引入的字段赋
    值只能作为声明的一部分出现,或者出现在同一类的构造函数中。
   
 ref 声明引用参数,当使用ref参数向方法传递参数时,编译器就将实际值在内存的地址传递给
    方法,因此,如果被调用的方法修改这些值,然后返回,那么调用代码的变量将被修改
    注意:1.ref和out的区别:ref要求在调用方法之前对被传递的参数初始化,out则不要求
       2.通过值传递和通过引用传递的区别:当一个参数以传值的方式传递(传递)时,变
       量的值即使在方法中被改变,它本身还是维持一开始传入的值,而以传址方式(引
       用传递)传入的变量,当方法将其值改变时,此变量的值便永远的更改;C#默认以
       传值的方式传递参数。
       3. 若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字。
 
 sealed 带有 sealed(密封的)  修饰符的类不允许你从它继承任何类。所以如果你不想一个类被继承,你可以对该类使用 sealed 关键字
 
 set set访问器,set用于设定数组中的元素值(与属性相同,set会接受外部传入的值,并自
    动以名称为value的变量存储这个值),-
 
 stackalloc 用于不安全的代码上下文中,以便在堆栈上分配内存块。
 
    注意:1.静态变量可以在成员函数或类定义之外初始化,创建多个对象不会重新初始化静
      态变量;
       2.对于类的所有对象,内存中仅存在一份静态变量的副本,所有对象共享内存中该
      静态变量的一份副本;
       3.非静态函数在调用前必须创建对象,有对象来调用函数;静态函数由类来调用,
      不需创建对象;
       4.静态函数可以访问静态变量,非静态函数可以访问静态变量,非静态函数可以
      访问非静态变量,而静态函数不可以访问非静态变量。
 
 struct 声明一个结构
    注意:结构与类的区别:1.结构是值类型的数据类型,类是引用类型;
          2.结构不支持继承;
          3.结构没有缺省的构造器。
 
 this 引用类的当前实例,还可用作扩展方法的第一个参数的修饰符。
    注意:1.this 的常用用途:(1)限定被相似的名称隐藏的成员(2)将对象作为参数传
           递到其他方法(3)声明索引器,
     2.由于静态成员函数存在于类一级,并且不是对象的一部分,因此没有 this 指针。
       在静态方法中引用 this 是错误的
 throw 用throw语句来产生用户自定义异常
 try try块监视可能抛出异常的语句,如果有个异常在try内发生,与try块关联的适当的异常
    处理程序将处理异常,try块必须至少有一个catch块
   
 typeof 用于获取类型的 System.Type 对象
    注意:(1)不能重载 typeof 运算符。
    (2)typeof 运算符也能用于公开的泛型类型。具有不止一个类型参数的类型的规范中必
     须有适当数量的逗号。
     
 unsafe 你可以使用 unsafe 修饰符在 C# 中定义一个不安全上下文,在不安全上下文中,你可以插
    入不安全代码,如 C++ 的指针等。
 
 using 利用该关键字指定所要引用的命名空间,接下来的程序代码便可以直接使用类名称
    注意:using 关键字有两个主要用途:
    (1)作为指令,用于为命名空间创建别名或导入其他命名空间中定义的类型;
    (2)作为语句,用于定义一个范围,在此范围的末尾将释放对象。
   
 value 隐式参数 value 用于设置访问器以及添加或移除事件处理程序。
 virtual 声明虚函数
 volatile 指示一个字段可以由多个同时执行的线程修改,声明为 volatile 的字段不受编译器优化
    (假定由单个线程访问)的限制。这样可以确保该字段在任何时间呈现的都是最新的值。
    注意:1.volatile 修饰符通常用于由多个线程访问但不使用 lock 语句对访问进行序列
    化的字段。volatile 关键字可应用于以下类型的字段:(1)引用类型。(2)指针类型
    (在不安全的上下文中)。请注意,虽然指针本身可以是可变的,但是它指向的对象不能
    是可变的。换句话说,您无法声明“指向可变对象的指针”。
    (3)整型,如 sbyte、byte、short、ushort、int、uint、char、float 和 bool。
    (4)具有整数基类型的枚举类型。(5)已知为引用类型的泛型类型参数。
    (6)IntPtr 和 UIntPtr
    2.可变关键字仅可应用于类或结构字段。不能将局部变量声明为 volatile
   
 
 where where 子句用于指定类型约束,这些约束可以作为泛型声明中定义的类型参数的变量。
 
 yield 在迭代器块中用于向枚举数对象提供值或发出迭代结束信号。
    注意:1.计算表达式并以枚举数对象值的形式返回;expression_r_r 必须可以隐式转换
    为迭代器的 yield 类型。
    2.yield 语句只能出现在 iterator 块中,该块可用作方法、运算符或访问器的体。这类
    方法、运算符或访问器的体受以下约束的控制:(1)不允许不安全块;(2)方法、运算
    符或访问器的参数不能是 ref 或 out;(3)yield 语句不能出现在匿名方法中。。
    3.当和 expression_r_r 一起使用时,yield return 语句不能出现在 catch 块中或含有
    一个或多个 catch 子句的 try 块中。
   
 
[变量类型]
 类型             别名       取值范围
 sbyte(1) System.SByte     [-128 ~ 127]
 byte(1) System.Byte [0 ~ 255]
 short(2) System.Int16 [-32768 ~ 32768]
 ushort(2) System.UInt16 [0 ~ 65535]
 int(4) System.Int32 [-2147483648 ~ 2147483647]
 uint(4) System.UInt32 [0 ~ 4294967295]
 long(8) System.Int64 [-9223372036854775808 ~ 9223372036854775807]
 ulong(8) System.UInt64 [0 ~ 18446744073709551615]
 float(4) System.Single
 double(8) System.Double
 decimal() System.Decimal /* 一种相当精确的带小数点数的表示形式 */
 char(2) System.Char [0 ~ 65535]
 bool(1) System.Boolean [0 | 1]
 string() System.Strings
posted @ 2016-03-25 17:47  Demon-咖啡  阅读(691)  评论(0编辑  收藏  举报