C#部分关键字归纳

来源:互联网 发布:js鼠标右键弹出菜单 编辑:程序博客网 时间:2024/06/06 02:29

一、 bool and Boolean different

  a)、bool是Boolean的别名. bool是C#中的,Boolean是.net Framework中的

  System.Boolean 是 .NET 类库中的一个类(确切地说是结构,struct),是 .NET 各语言通用的。值类型是放在堆栈中(stack),而引用类型是放在堆(heap)中,堆(heap)里的东西是动态生成,所以会比放在堆栈(stack)中慢。

  值类型与引用类型的简介:

  1、 值类型主要由两类组成

  A)、结构 b)、枚举

  A)结构包括 数值类型(整型、浮点型、decimal)、bool型、用户定义结构

  基于值类型的变量直接包含值。将一个值类型变量赋给另一个值类型变量时,将复制包含的值。这与引用类型变量的赋值不同,引用类型变量的赋值只复制对对象的引用,而不复制对象本身。与引用类型不同,从值类型不可能派生出新的类型。但与引用类型相同的是,结构也可以实现接口。与引用类型不同,值类型不可能包含 null 值。然而,可空类型功能允许将 null 赋给值类型。 每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值。

  B)、enum 关键字用于声明枚举,即一种由一组称为枚举数列表的命名常数组成的独特类型enum Days {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};//在此枚举中,强制元素序列从 1 而不是 0 开始

  2、引用类型:引用类型的变量又称为对象,可存储对实际数据的引用。有class,interface and delegate(封装命名方法或匿名方法,委托类似于 C++ 中的函数指针;但是,委托是类型安全和可靠的)

  3、指针类型:指针类型不继承 object,并且指针类型与 object 之间不存在转换。此外,装箱和取消装箱不支持指针。但是,允许在不同指针类型之间以及指针类型与整型之间进行转换。当在同一个声明中声明多个指针时,* 仅与基础类型一起使用,而不是作为每个指针名称的前缀。如:int* p1,p2,p3;//OK int *p1,*p2,*p3;//Invalidate in C# 指针类型 仅在unsafe模式下可用。

  内置 C# 类型的关键字,这些类型是 System 命名空间中的预定义类型的别名

C# 类型

.NET Framework 类型

bool

System.Boolean

byte

System.Byte

sbyte

System.SByte

char

System.Char

decimal

System.Decimal

double

System.Double

float

System.Single

int

System.Int32

uint

System.UInt32

long

System.Int64

ulong

System.UInt64

object

System.Object

short

System.Int16

ushort

System.UInt16

string

System.String

  除了 object 和 string 外,表中的所有类型均称为简单类型。

  字符串格式化:

 c

货币

Console.Write("{0:C}", 2.5);

Console.Write("{0:C}", -2.5);

$2.50

($2.50)

 d

十进制数

Console.Write("{0:D5}", 25);

00025

 e

科学型

Console.Write("{0:E}", 250000);

2.500000E+005

 f

固定点

Console.Write("{0:F2}", 25);

Console.Write("{0:F0}", 25);

25.00

25

 g

常规

Console.Write("{0:G}", 2.5);

2.5

 n

数字

Console.Write("{0:N}", 2500000);

2,500,000.00

 x

十六进制

Console.Write("{0:X}", 250);

Console.Write("{0:X}", 0xffff);

FA

FFFF

二、修饰符

  命名空间、(namespace),enum,interface 都不允许使用访问修饰符,没有访问限制。

  并且 enum and interface 成员的访问限制默认为public,而class and struct的访问限制默认为private。在struct的访问限制里只有public ,private ,internal三种访问限制。

  1、 访问限制修饰符:public ,private,protected,internal,protected internal(网上查找,重载与重写的区别是???)

  A)、public 访问不受限制

  B)、protected 访问仅限于包含类或从包含类派生的类型

  C)、internal 访问仅限于当前程序集

  D)、protected internal 访问仅限于从包含类派生的当前程序集或类型

  E)、private 访问仅限于包含类型

  F)、abstract可以和类、方法、属性、索引器及事件一起使用。在类声明中使用 abstract 修饰符以指示某个类只能是其他类的基类 。Remark: 抽象类不能实例化。抽象类的用途是提供多个派生类可共享的基类的公共定义,抽象类的成员方法同其派生类实现,在抽象类只提供定义,如:

public abstract void DoWork(int i);//抽象方法没有实现,不是常规的方法块,所以后面用分号。public class D{    public virtual void DoWork(int i)    {        // Original implementation.    }}public abstract class E : D{    public abstract override void DoWork(int i);}public class F : E{    public override void DoWork(int i)    {        // New implementation.    }}//如果将虚方法声明为抽象方法,则它对于从抽象类继承的所有类而言仍然是虚的。继承抽象方法的类无法访问该方法的原始实现。在前面的示例中,类 F 上的 DoWork 无法调用类 D 上的 DoWork。在此情况下,抽象类可以强制派生类为虚方法提供新的方法实现.

  G)、密封类sealed:密封类不能用作基类。因此,它也不能是抽象类。密封类主要用于防止派生。

  H)、const (readonly的区别,谁的效果好,在什么样的条件下) 关键字用于修改字段或局部变量的声明。它指定字段或局部变量的值是常数,不能被修改。const 字段只能在该字段的声明中初始化;readonly 字段可以在声明或构造函数中初始化。因此,根据所使用的构造函数,readonly 字段可能具有不同的值。另外,const 字段是编译时常数,而 readonly 字段可用于运行时常数.

  I)、event、关键字用于指定事件,类和结构使用事件将出现的可能影响对象状态的事件通知给对象;

public delegate void SampleEventDelegate(object sender, EventArgs e);public class SampleEventSource{    public event SampleEventDelegate SampleEvent;}

  J)、extern:用于声明在外部实现的方法。extern 修饰符的常见用法是在使用 Interop 服务调入非托管代码时与 DllImport 属性一起使用;在这种情况下,该方法还必须声明为 static,如下面的示例所示:

[DllImport("avifil32.dll")]private static extern void AVIFileInit();

  K)、Override(重写基类相应的目标) : 扩展或修改继承的方法、属性、索引器或事件的抽象实现或虚实现。Remark:1、不能重写非虚方法或静态方法。重写的基方法必须是 virtual、abstract 或 override 的;2、override 声明不能更改 virtual 方法的可访问性。override 方法和 virtual 方法必须具有相同的访问修饰符;3、不能使用修饰符 new、static、virtual 或 abstract 来修改override 方法

  L)、static:声明属于类型本身而不是属于特定对象的静态成员,不可修饰索引器、析构函数或类以外的类型。

  M)、unsafe:表示不安全上下文,该上下文是任何涉及指针的操作所必需的

  N)、virtual 关键字用于修饰方法、属性、索引器或事件声明,并且允许在派生类中重写这些对象。不能与 static、abstract 和 override 修饰符一起使用。

  O)、volatile关键字表示字段可能被多个并发执行线程修改,同于多个线程进行访问修改,所以不用lock语句进行序列化的字段。Remark: 不能将局部变量声明为 volatile。

  P)、fixed:禁止垃圾回收器重定位可移动的变量,还可用于创建固定大小的缓冲区。语句设置指向托管变量的指针并在 statement 执行期间“钉住”该变量。如果没有 fixed 语句,则指向可移动托管变量的指针的作用很小,因为垃圾回收可能不可预知地重定位变量

  Q)、lock 关键字将语句块标记为临界区,方法是获取给定对象的互斥锁,执行语句,然后释放该锁

  方法参数:

  A)、params: 可以指定在参数数目可变处采用参数的方法参数。在方法声明中只允许一个 params 关键字如:

        Public static void UaseParams(params object[]){}

  B)、ref and out different ,ref:关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字, 传递到 ref 参数的参数必须最先初始化. 这与 out 不同,out 的参数在传递之前不需要显式初始化。

  命名空间的关键字:

  A)、namespace 关键字用于声明一个范围。此命名空间范围允许您组织代码并为您提供了创建全局唯一类型的方法。

  B)、using: 1、作为指令,用于为命名空间创建别名或导入其他命名空间中定义的类型。2、作为语句,用于定义一个范围,在此范围的末尾将释放对象。

  Using 作为指令时有两个用途:

  一、允许在命名空间中使用类型,以便您不必限定在该命名空间中使用的类型;

        Using namespace;

  Using 作为语句:定义一个范围,将在此范围之外释放一个或多个对象:

        using (Font font1 = new Font("Arial", 10.0f),font2 = new Font(“Arial”,12f))

  using 语句允许程序员指定使用资源的对象应当何时释放资源。为 using 语句提供的对象必须实现 IDisposable 接口。此接口提供了 Dispose 方法,该方法将释放此对象的资源

  如:using (C c = new C()) ,C实现它自己的 Dispose 行为。注意类型C必须从 IDisposable 继承,所以C实现了IDisposable接口

  运算符关键字

  A)、as(查找与is 之间的相同点与不同点): 用于在兼容的引用类型之间执行转换, 当转换失败时,运算符将产生空,而不是引发异常。更严格地说,这种形式的表达式,如:string[] str= new string[count]; String s = str[i] as string;

  B)、is: 检查对象是否与给定类型兼容,如果所提供的表达式非空,并且所提供的对象可以强制转换为所提供的类型而不会导致引发异常,则 is 表达式的计算结果将是 true。如:

  Object o; 类classs1, o is class1;

  C)、new:有三种用途:运算符、修饰符、约束

  D)、sizeof:用于获取值类型的字节大小。例如,可以如下所示检索 int 类型的大小:

  int sizeInt = sizeof(int);//仅适用于值类型,不适合引用类型

  E)、typeof:用于获取类型的 System.Type 对象。Typeof表达式可以采用如下方式:

  System.Type type = Typeof(int);若要获取表达式的的运行时的类型,可以使用.net.framework的方法GetType();如:

  Int i =0; System.Type type = i.GetType();

  F)、stackalloc:在堆栈上分配内存块,如:int* fib = stackalloc int[100];

  Remark: stackalloc 仅在局部变量的初始值设定项中有效

  转换关键字:explicit、implicit、operator

  访问关键字:base and this

  上下文关键字:where, yield

原创粉丝点击