2013年3月23日

C# 高级编程(笔记4)

摘要: 第8章 委托、Lambda表达式和事件1.多播委托:一个委托中包含多个方法 如果调用多播委托,就可以按顺序连续调用多个方法,为此,委托的签名就必须返回void;否则,就只能得到委托调用的最后一个方法的结果,前面调用的方法返回结果被后面调用的方法返回的结果给覆盖了。 通过一个委托调用多个方法还可能导致一个大问题。多播委托包含一个逐个调用的委托集合。如果通过委托调用的其中一个方法抛出一个异常,整个迭代就会停止。 static void One() { Console.WriteLine("One"); throw new Exception("Err... 阅读全文

posted @ 2013-03-23 08:27 Gcam 阅读(199) 评论(0) 推荐(0) 编辑

2013年3月22日

C# 高级编程(笔记3)

摘要: 第5章 泛型1.泛型类的静态成员 泛型类的静态成员只能在类的一个实例中共享 public class staticDemo<T> { public static int x; }由于同时对一个string类型和一个int类型使用了staticDemo<T>类,所以存在两组静态字段:staticDemo<string>.x = 4; staticDemo<int>.x = 5;Console.WriteLine(staticDemo<string>.x); //输出 42.协变和抗变:指对参数和返回值的类型进行转换假定有Shape和Re 阅读全文

posted @ 2013-03-22 22:16 Gcam 阅读(175) 评论(0) 推荐(0) 编辑

2013年3月20日

C# 高级编程(笔记2)

摘要: 第四章1.接口 public interface ITty { void Put(); } a.一般情况下,接口只能包含方法、属性、索引器和事件的声明。不允许提供接口中任何成员的实现方式,只声明没有实现。 b.不能有构造函数,接口中的成员不能有访问修饰符,因为接口本来就是公共的(public), c.只要一个类继承了接口,它就得为接口中的所有方法提供实现2.隐藏方法 如果签名相同的方法在基类和派生类中都进行了声明,但该方法没有分别声明为virtual 和 override,派生类方法就会隐藏基类方法。在大多数清况下是要重写方法,而不是隐藏方法,因为隐藏方法会造成... 阅读全文

posted @ 2013-03-20 22:50 Gcam 阅读(140) 评论(0) 推荐(0) 编辑

2013年3月19日

C# 高级编程(笔记1)

摘要: 第三章1.方法重载不能仅根据方法的返回值类型来区分, 即:参数个数和参数类型都相同,只是函数的返回值不同,是不能作为函数的重载的2.结构的构造函数 为结构定义构造函数的方式与为类定义构造函数的方式相同,但不允许定义无参数的构造函数,因为编译器总是为其提供一个无参数的默认构造函数,它是不允许替换的。 结构中字段的初始值不能绕过默认构造函数,也就是必须在构造函数中完成初始化,且不能是无参构造函数 结构是值类型,不支持继承,结构中的new运算符与类和其他引用类型的工作方式不同。new运算符 并不分配堆中的内存,而是只调用相应的构造函数,根据传送给它的参数来初始化所有的字段。stFuct Dimens 阅读全文

posted @ 2013-03-19 21:57 Gcam 阅读(160) 评论(0) 推荐(0) 编辑

2013年3月9日

Web(7)----补充

摘要: 小结:1. HTTP协议是无状态的http协议是无状态的,同一个客户端的这次请求和上次请求是没有对应关系,对http服务器来说,它并不知道这两个请求来自同一个客户端。2. HTTP消息的结构 A.Request消息的结构, Request消息分为3部分,第一部分叫Request line, 第二部分叫Request header, 第三部分是body. 注意:header和body之间有个空行 B.Response消息的结构,和Request消息的结构基本一样。同样也分为三部分,第一部分叫Response line, 第二部分叫Response header,第三部分是body. 注意:hea 阅读全文

posted @ 2013-03-09 23:40 Gcam 阅读(125) 评论(0) 推荐(0) 编辑

2013年3月8日

可空值类型[Nullable value type]

摘要: 小结:可空值类型[Nullable value type]1. 一个值类型的变量永远不可能为null,它总是包含值类型的值本身。但某些情况下,这会带来问题。例如,设计一个数据库时,可以将一个列的数据类型定义成一个32位整数,并映射到FCL的Int32数据类型。但是,数据库中的一个列是允许值为空的,使用.Net Framework来处理数据库数据可能变得相当困难,因为CLR中没有办法将一个Int32值表示成null。为了解决这个问题,Microsoft在CLR中添加了可空值类型(nullable value type)【System.Nullable< T >】的概念。CLR中的定义 阅读全文

posted @ 2013-03-08 22:59 Gcam 阅读(425) 评论(0) 推荐(0) 编辑

2013年3月3日

关于GC

摘要: 小结:1. 每个应用程序都有一组根(Root),一个根是一个存储位置,其中包含着一个指向引用类型对象的内存指针。该指针或者指向一个托管堆中的对象,或者被设为null。如:静态字段被认为是根,方法参数或局部变量也被认为是一个根,对于变量,仅当变量是引用类型时才被认为是根,值类型的变量永远不被认为是根。2. 垃圾收集当垃圾收集器开始工作时,它会首先假设托管堆中的所有对象都是可收集的垃圾。也就是说,垃圾收集器假设线程堆栈中没有一个变量引用堆中的对象,没有CPU寄存器引用堆中的对象,而且也没有静态字段引用堆中的对象。A. 垃圾收集的第一步(标记阶段)垃圾收集器遍历线程堆栈,检查所有的根,如果发现根引用 阅读全文

posted @ 2013-03-03 20:08 Gcam 阅读(273) 评论(0) 推荐(0) 编辑

关于接口与抽象类

摘要: 小结:1. 接口只有方法名,没有方法体,由继承自它的类提供所有方法的实现,C#中规定类只能单继承,但可以通过接口来实现多继承,即一个类可以继承多个不同的接口2. 定义一个接口a. 不能定义构造函数b. 不能定义实例成员c. 不能定义静态成员3. 调用接口方法如:public sealed class String : IComparable, ICloneable, IConvertible, IComparable<string>, IEnumerable<char>, IEnumerable, IEquatable<string>String继承了多个接 阅读全文

posted @ 2013-03-03 10:12 Gcam 阅读(169) 评论(0) 推荐(0) 编辑

2013年3月2日

泛型与委托

摘要: 小结:一、泛型【代码重用/算法重用】1.优点:a.源代码保护:使用泛型算法时不需要访问算法的源代码b.类型安全性c.更加清晰的代码d.更好的性能:CLR不再需要执行任何装箱、拆箱操作2.常用的泛型集合类/泛型容器a.List<T>b.Dictionary<TKey,TValue>c.Stack<T>d.Queue<T>3.代码爆炸使用泛型类型参数的一个方法在进行JIT编译时,CLR获取方法的IL,替换指定的类型参数,然后针对那个方法在指定数据类型上的操作创建特有的本地代码。这是泛型的主要特性之一,然而,这样做有一个缺点:CLR要为每种不同的方法/ 阅读全文

posted @ 2013-03-02 10:17 Gcam 阅读(324) 评论(0) 推荐(0) 编辑

2013年2月28日

构造函数的代码膨胀问题

摘要: 1. 类1 public class A { private Int32 x = 15; }查看其默认的无参构造函数形成的IL Code:.method public hidebysig specialname rtspecialname instance void .ctor() cil managed{ // Code size 16 (0x10) .maxstack 8 IL_0000: ldarg.0 IL_0001: ldc.i4.s 15 IL_0003: stfld int32 ConsoleApplication9.... 阅读全文

posted @ 2013-02-28 23:14 Gcam 阅读(185) 评论(0) 推荐(0) 编辑

导航