随笔分类 - C#

摘要:"常量性"指的是:对象自创建后,它的值就保持不变。如果在构造函数中就验证了参数的有效性,那么就能够保证之后该变量值始终是有效的——因为已经不能再改变... 阅读全文
posted @ 2013-01-13 20:14 gyzhao 阅读(1711) 评论(0) 推荐(3) 编辑
摘要:.NET系统的默认初始化过程会将所有的对象设置为0。我们就会难免创建出一个初始化为0值的值类型,所以我们应该将0作为类型的默认值,可以避免一些不必要的Bug... 阅读全文
posted @ 2013-01-12 17:30 gyzhao 阅读(1442) 评论(4) 推荐(0) 编辑
摘要:C#和JAVA不同,在C#中可以创建值类型,而在Java中创建的所有类型都是引用类型。在使用C#开发时,选择值类型还是引用类型对我们的程序的行为会产生很大的影响,所以我们需要对值类型和引用类型的使用场景进行了解和对二者的不同进行区分。C#之所以添加了值类型和引用... 阅读全文
posted @ 2012-12-22 10:48 gyzhao 阅读(1139) 评论(1) 推荐(0) 编辑
摘要:如何为我们自己的包含非托管资源的类型编写资源管理代码呢?在 .NET 中为我们提供了一种标准的销毁非托管资源的模式,这个标准的模式能够使使用者通过调用IDisposable接口正常释放掉非托管资源,也能够保证使用者在忘记释放资源时使用终结器释放。 阅读全文
posted @ 2012-11-30 09:33 gyzhao 阅读(1784) 评论(7) 推荐(5) 编辑
摘要:我们知道:C#是一门虚拟机语言,C#编译器首先将C#代码编译成IL代码,运行程序时CLR(Common Language Runtime,公共语言运行时)通过调用JIT(just-in-time Compiler,即时编译器)来将IL代动态即时编译成可执行的机器码。GC(Garbage Collector,垃圾收集器)自动为我们的应用程序进... 阅读全文
posted @ 2012-11-27 09:03 gyzhao 阅读(1901) 评论(9) 推荐(5) 编辑
摘要:在.NET环境中,非托管系统资源由开发人员来负责释放,且非托管系统资源必须显式的使用IDisposable接口的Dispose()来释放(详见:了解.NET内存管理机制)。所有封装或使用了非托管资源的类型都实现了IDisposable接口。同时这些类也在终结器中调用Dispose(),保证了开发人员在忘记资源... 阅读全文
posted @ 2012-11-26 08:52 gyzhao 阅读(2547) 评论(8) 推荐(11) 编辑
摘要:ADO.NET 为我们提供了一些查询内存中数据表的API,利用这些API我们可以对内存中的DataTable进行类似于查询数据库查询的操作。当我们想要访问DataTable中特定的行时,可以根据这个表的一列或者多列作为搜索条件来访问这些数据行。和数据库中的表类似,每个DataTable都包括一个可选... 阅读全文
posted @ 2012-11-23 17:05 gyzhao 阅读(2700) 评论(0) 推荐(1) 编辑
摘要:一个类通常会有多个构造函数,并且随着时间的推移,成员变量的增加,功能的改变,构造函数的个数也会不断上升。很多的开发人员一般会先编写一个构造函数,然后将其代码复制粘贴到其他的构造函数当中,以支持在类接口上定义的多个重写构造函数.其实我们不应该这样做,当发现... 阅读全文
posted @ 2012-11-23 09:06 gyzhao 阅读(1955) 评论(5) 推荐(4) 编辑
摘要:我们知道在C#语言中创建一个类型的实例前,就应该初始化该类型的所有静态成员变量。C#语言为我们提供了静态初始化器和静态构造函数。其中,静态构造函数是一个特殊的构造函数,将在其他所有方法执行前以及变量或属性被第一次访问之前将自动调用静态构造函数,且仅执行一次... 阅读全文
posted @ 2012-11-15 17:17 gyzhao 阅读(3918) 评论(7) 推荐(3) 编辑
摘要:一般情况下,一个类都会有多个构造函数。随着时间的推移,成员变量、构造函数不断增加。为了处理这种情况最方便的办法就是:在声明变量的时候进行初始化,而不是在每个构造函数中进行。无论是类成员(静态变量)合适实例变量,我们都应该充分利用初始化器的语法。C#编程在,一般在... 阅读全文
posted @ 2012-11-06 21:59 gyzhao 阅读(2844) 评论(3) 推荐(4) 编辑
摘要:我们知道C#是一门虚拟机语言,在C#编译器将C#代码编译成IL代码后,运行在.NET CLR(公共语言运行时)中,运行程序是CLR通过调用JIT(即时编译器)来将IL代动态即时编译成可执行的机器码。在CLR中有一个非常重要的概念:CLR GC(Garbage Collector,垃圾收集器),GC自动为我们的应用程序进... 阅读全文
posted @ 2012-10-22 11:09 gyzhao 阅读(3868) 评论(20) 推荐(7) 编辑
摘要:TCP 协议(Transmission Control Protocol,传输控制协议)是TCP/IP体系中面向连接(connection oriented)的传输层(transport layer),TCP协议能够检测和恢复IP层提供的主机到主机的信道中可能发生的报文丢失、重复以及其他错误。由于TCP协议是一种面向连接协议... 阅读全文
posted @ 2012-10-18 09:03 gyzhao 阅读(21728) 评论(20) 推荐(26) 编辑
摘要:经过前面基础知识作为背景,现在对Socket编程进行进一步的学习。在 System.Net.Socket 命名空间提供了Socket类,利用该类我们可以直接编写Socket的客户端和服务的的程序。但是直接使用Socket类编写Socket程序会比较麻烦、而且容易出错,所以.NET为我们提供了进一步封... 阅读全文
posted @ 2012-10-15 09:24 gyzhao 阅读(19943) 评论(26) 推荐(37) 编辑
摘要:在网络通信中,很多情况下:比如说QQ聊天,通讯双方直接传递的都是字符信息。但是字符信息并不能够直接通过网络传输,这些字符集必须先转换成一个字节序列后才能够在网络中传输,于是这里就产生了编码和解码的概念。对于Unicode字符来说,编码是指将一组Unicode字符转换为... 阅读全文
posted @ 2012-10-13 11:19 gyzhao 阅读(9106) 评论(11) 推荐(19) 编辑
摘要:通过前面的笔记我们可以知道:一个客户端想要发起一次通信,先决条件就是需要知道运行着服务器端程序的主机的IP地址是多少,端口号是多少。然后我们才能够通过这个地址向服务器特定的应用程序发送信息。对于网络上的两台计算机来说,用户操作的计算机称为本地主机,与该计算机... 阅读全文
posted @ 2012-10-11 17:38 gyzhao 阅读(10396) 评论(27) 推荐(25) 编辑
摘要:计算机程序能够相互联网,相互通讯,这使一切都成为可能,这也是当今互联网存在的基础。那么程序是如何通过网络相互通信的呢?这就是我记录这系列的笔记的原因。C#语言从一开始就是为了互联网而设计的,它为实现程序的相互通信提供了许多有用API,这类应用编程接口被称为套接字... 阅读全文
posted @ 2012-10-10 19:34 gyzhao 阅读(8665) 评论(20) 推荐(38) 编辑
摘要:在应用程序开发过程中,开发者都力求写出更加高效的代码。但是当你想手工为C#编译器优化代码时,你的种种优化可能反倒会阻碍JIT进行更加高效的优化。因此,我们最好尽可能的写出最清晰的代码,将优化工作交给JIT编译器去完成。在.NET平台下开发程序的开发者都应该知道... 阅读全文
posted @ 2012-10-08 23:14 gyzhao 阅读(2163) 评论(5) 推荐(6) 编辑
摘要:C#4.0 引入了具名参数(MSDN翻译为“命名实参”,个人认为具名参数更形象,可选参数亦是)和可选参数(可选实参)。客户端代码使用具名参数意味着:方法中的参数名称也成为了公有接口的一部分。假如修改公有参数的名称将有可能破坏调用者的代码。这意味着:调用者应该尽可... 阅读全文
posted @ 2012-10-07 21:54 gyzhao 阅读(2876) 评论(2) 推荐(2) 编辑
摘要:查询语法(query syntax)可以让程序逻辑的表达由“命令式”转换为“声明式”。查询语法定义了想要的结果,而把具体实现交给其他的专门实现。使用查询语法(实现了查询表达式模式的方法语法也可以)要比传统的命令式循环结果更加清晰的表达你的意图... 阅读全文
posted @ 2012-09-01 21:19 gyzhao 阅读(2581) 评论(10) 推荐(4) 编辑
摘要:C#允许我们创建两种类型:值类型和引用类型。如果两个引用类型的变量指向的是同一个对象,它们将被认为是“引用相等”。如果两个值类型的变量类型相同且包含同样的内容,它们被认为是“值相等”。这也正是同等性判断需要如此多方法的原因... 阅读全文
posted @ 2012-09-01 14:26 gyzhao 阅读(1849) 评论(5) 推荐(1) 编辑