随笔分类 - C#学习笔记
摘要:var关键字只能用于方法或属性范围内的本地变量。其不能用来定义返回值,参数或自定义类型或结构的字段数据。
阅读全文
摘要:首先,说一下在C#中的情况:一. const关键字: const是用来定义常量(它在赋初始值后从未变过),在定义时必须为其指定初始值。 const所定义的常量字段是隐式静态的,即你可以直接在类级别上进行调用,而不在对象实例上。 const定义的常量,最大的限制就是:在编译时必须知道常量的值。二.readonly关键字: readonly严格说是定义变量的,不过,其上赋初值之后不能改变。 readonly字段的值可以在运行时而不是编译时决定,但仅限于在构造函数中赋值,其它地方是违法的。 readonly字段不是隐式静态的。如果希望和const字段一样在类级别公开,则必须显示使用static关键字
阅读全文
摘要:Lambda其实就是匿名方法的简写。而匿名方法其实是一个定义委托,然后给委托对象添加方法过程的简写。事件其实就是委托的语法糖。强调一下方法组转换语法:其允许我们在调用以委托作为参数的方法时直接提供方法的名称,而不用创建委托对象。
阅读全文
摘要:首先要知道命名空间System.Collections.Generic其为大多数非泛型接口都定义了泛型版本。了解其中几个泛型接口和核心类:1.List<T>类其主要可以动态调整内容。2.Stack<T>类表示以后进先出的方式维护数据的集合。包含Push()和Pop()方法。3.Queue<T>类表示以先进先出的方式访问数据的容器。包含Dequeue(),Enqueue(),Peek()方法。4.SortedSet<T>类.NET4中新引入的。这个类中的项是排序的,在插入和移除项之后,也能自动确保排序正确。不过,你必须通知它按何种方式排序,可以向其
阅读全文
摘要:接口,其实并不难理解。就是一组抽象成员的集合。 其成员只能是方法和属性的签名,不能有具体实现。而且接口的成员也不指定修饰符(因为所有接口成员都是隐匿公共的和抽象的)。当一个类或者结构实现包含同名成员的接口,这时我们可以通过显式实现解决命名冲突。大致模式如下:returnType InterfaceName.MethodName(params)注意:此时,不能提供访问修饰符,因为显式实现的成员总是自动为私有的。也就是说这些显式实现的成员在对像级别是不可用的。下面介绍几种常用的预定义接口:一. 构建可处置类型//命名空间是Systempublic interface IDisposable { .
阅读全文
摘要:一. 构建可终结对象//System.Object public class Object { ... protected virtual void Finalize() { } }当在自定义类中重写Finalize()时,垃圾回收器就可以在从内存中删除这个对象前,调用对象的Finalize()方法。 注意,结构类型是不可以重写Finalize()的。这个成员被定义为被保护的,所以不能通过点操作符从类实例中直接调用一个对象的Finalize()方法。实际上,对象并不显示的调用Finalize()方法,其主要是由垃圾回收器...
阅读全文
摘要:静态构造函数的几点注意:一. 一个类只能定义一个静态构造函数。换句话说,静态构造函数不能被重载。二. 静态构造函数不允许访问修饰符并且不能接受任何参数。三. 无论创建了多少类型的对象,静态构造函数只执行一次。四. 运行库创建类实例或调用者首次访问静态成员之前,运行库会调用静态构造函数。五. 静态构造函数的执行先于任何实例级别的构造函数。补充一下静态类的定义:在类级别添加关键字“static"。 如果一个类被定义成静态的,就不能使用"new"关键字来创建并且只能包含用static关键字标记的成员或字段。静态类中只能有静态成员,而一般类中可以有静态成员也可以有其它非静
阅读全文
摘要:重要的两点:一. 如果按引用传递(添加ref关键字),被调用者可能改变对象的状态数据的值和所引用的对象。二. 如果按值传递(没有任何关键字修饰),被调用者可能改变对象的状态数据的值,但不能改变所引用的对象。具体整体可参考《C#与.NET4高级程序设计》第五版的P116~P118。
阅读全文
摘要:首先,.NET运行时的默认行为是忽略运算溢出。当只需要对部分代码进行溢出检测时,可以把该部分代码放入checked{}内,即可。当需要项目级别的溢出检测时,可以设置项目的属性中的生成->高级->检测运算上溢/下溢。如果在设置项目级别的溢出检测的前提下,有部分代码是可以忽略运算溢出,此时可以把这部分代码放入unchecked{}中,则表示该段代码的溢出是可以接受的。简要说明一下checked用法:如果我们使用了些命令或关键字,则C#编译器会使用额外的CIL指令来测试在将两个数值数据类型相加,相乘,相减和相除时可能产生的溢出情况。如果发生了溢出,则会得到一个运行异常:System.Ov
阅读全文
摘要:首先是静态构造函数:static构造函数是初始化类层次的项目,通常是初始化类的静态字段。类层次的项目需要被初始化:1.在任何静态成员被引用之前2.在类的任何实例被创建之前3.类只能有一个静态构造函数,而且不能带参数4.如同静态方法,静态构造函数不能访问所在类的实例成员,因此也不能使用this访问器其次是对象初始化列表:其有两种语法形式:new TypeName {对象初始化列表}new TypeName(ArgList) {对象初始化列表}有两个重要内容需要注意:1.要初始化的字段和属性必须是创建对象的代码可以访问的。2.初始化发生在构造方法的执行之后,因此在构造方法中设置的值可能会在之后对象
阅读全文
摘要:一.值参数:使用值参数,就是把实参的值复制到形参中。通过这种方式把数据传递到方法。方法被调用时,系统做如下工作:1.在栈中为形参分配空间2.复制实参到形参。一个值参数的实参不一定是变量,也可以是任何能计算成相应数据类型的表达式。小结:如果参数是值类型,它的值不受方法的影响。如果是引用类型,它的值会被方法的行为改变。二.引用参数:使用引用参数时,必须在方法的声明和调用中同时使用ref关键字。而且实参必须是变量,不能为表达式。如果是引用类型变量,在用作实参前必须被赋值,可以赋值为一个引用或Null值。小结:这时的形参的参数名看起来就好像是实参变量的别名,也就是蠊,它们指向的是相同的内在位置。所以此
阅读全文
摘要:一.interface:引入一个方法的名称二.virtual:其方法是方法的第一个实现三.override:其方法是方法的另一个实现四.sealed:其方法是方法的最后一个实现
阅读全文
摘要:首先来说一下抽象类:用关键字abstract修饰。其包含抽象成员(也是用abstract关键字修饰),且这些成员应该显示的标记为public。不能实例化,但其中可以有方法的具体实现。即除了抽象成员以外,可以有其它不用abstract修饰的成员。即为非抽象成员,其也在所有派生类中继承。对于abstract修饰的成员,在派生类中必须实现,且使用关键字override。再来说一下接口:是由关键字interface定义。其不包含实现,也不包含数据(不允许定义字段)。接口成员不能使用如public等访问修饰符,其所有成员都默认为public.关于接口的实现有两种方式:一是显示的实现:通过接口本身来调用它
阅读全文
摘要:在C#中,is运算符可以判断基础类型。返回是true or false。is运算符的优点在于,它允许验证一个数据项是否属于一个特定的类型。对于is还有一点要强调,is运算符不仅检查转型是否成功,还会检查底层对象本身是否真的是一个特定的类型。比如现在有一句为:int a;bool b;b=a.tostring() is string:其结果b=false.虽然int类型可以转换为string,但是其底层不是string类型的。所以is运算后,其结果为false.as运算符则更进一步,它会尝试将对象转换为一个特定的数据类型。但是,其最突出的一个优点就是:在使用as时,如果转换无效,即假如源类型不是
阅读全文
摘要:C#支持重写实例方法和属性,但不支持重写字段或者任何静态成员。为了进行重写,在基类中允许重写的成员标记为virtual.如果没有这个关键字,则该成员不能被重写。在派生类中重写上述的成员,则必须要加上关键字override.注意,为了重写一个方法,基类和派生类成员必须匹配,而且要有对应的virtual和override关键字。假如指定了override关键字,就假定派生类的实现会隐藏基类的实现。用override修饰的任何成员都会自动成为virtual成员,使其子类能进一步“特化”它的实现。其在执行到黄色标记一句时,局部变量为:说明,contact的FirstName 和LastName仍被设置
阅读全文

浙公网安备 33010602011771号