11 2011 档案
摘要:首先,我们虚拟一个系统环境(e-Shop),即网上商店的应用程序,其中有一个应用: 获取指定分类下的所有产品信息。我们按照传统的思路来实现。图1展示了系统的设计图。新建一个类库工程EShop.Service. 然后添加相应的类到工程中。原始程序namespace EShop.Service{ public class Product { } public class ProductRepository { public IList<Product> GetProductsByCategory(int categoryId) { ...
阅读全文
摘要:Equals()和==之区别首先,理解一下值类型和引用类型的区别:值类型存储在内存的栈中,引用类型变量的地址存储在栈中,而本身的内容存储在堆中(字符串是一种特殊的引用类型)。我们现在来理解Equals和==的区别就容易多了。Equals比较的是两个变量是否为同一个对象的引用,即堆中的内容是否相同。==比较的是两个变量的值是否相同,对引用类型来说则是两个变量的存储地址是否一致,即栈中的内容是否相同。(举个形象的例子:Equals比较的是文件夹中的内容是否一致,==比较的是文件夹的路径是否一致)string s1 = "Miracle";string s2 = "Mi
阅读全文
摘要:任何完美的应用程序和技术高明的程序员,都不可能是绝对不出差错的。与其追求完美无错的代码,还不如将程序中可能预知的异常在发布前进行很好的处理,可能是最有价值的。那么,C#是如何处理异常的呢?首先,我们从最普通的异常说起:使用try-catch-finally块捕获异常,基本格式如下:try{ //获取并使用资源,可能出现异常}catch(DivideByZeroException de){}catch(ArithmeticException ae){}catch(Exception e){ //捕获并处理异常,当出现多个异常且异常类之间有继承关系(DivideByZeroExcept...
阅读全文
摘要:以下是我总结的平时遇到的最常见的技术点(可称为"刀法"),掌握好这些变幻的"刀法",有助于代码的简洁以提高效率。using的三大用法:1. 导入命名空间(类似于Java的import,C语言的include)。2. 为命名空间设置别名。在多个命名空间中存在同名的成员时加以区分。3. 在范围结束之前或中途出现异常即时释放资源。需要说明的是,该资源的类型必须实现IDisposable接口。@的三大用法:1. 可以将字符串原义输出(特别是转义字符,如:\)。2. 用来表示跨行的字符串,也即可以在多行内声明字符串。3. 可以加在保留字前当作标示符使用(如:@cl
阅读全文
摘要:对很多人来说,对.Net的反射机制不甚了解,其实反射是一种很优秀的机制,知道了它,就可以把握很多程序的脉搏。如何这样说呢?首先,反射是这样定义的:可以在运行时根据所提供的类库(.dll)来进行解析以获得其中包含的类型(包含类、结构、委托、接口、枚举等)成员,进而获取到对应的方法、属性、事件以及构造函数等(甚至可获得对应的名称、限定符和参数)信息。有了这些信息,我们就可以动态的创建对象,即使在编译时不知道对象的类型也无所谓。打个比方:反射好比人体解剖,可以给一个完整的人(^^哈哈,当然是死人哈,这里类比一个.dll文件),通过解剖(反射)就可以获取对应的部位(成员),进而利用这些部位去做更多的事
阅读全文
摘要:对初学C#的人来说,对委托与事件的理解可能仅停留在字面的概念上,不愿意去灵活利用它们来为应用程序服务。其实,理解清楚其中的原理并熟练搬到实际项目中,可能会使我们的程序更加通俗易懂和更好的维护。我们不妨从一个小例子入手,去理解委托与事件的精髓所在。class Greeting{ public void SpeakChinese(string name) { Console.WriteLine("你好," + name); } //Speak将委托调用SpeakByChinese(中文版问候) public void Speak(string name)...
阅读全文
摘要:我们经常谈到面向对象的重要特性之一:继承,需要理解继承的重要机制:1. 可传递性。C-->B,B-->A ==> C-->A,即C继承A中所有非私有成员。2. 对基类进行扩展。即派生类在拥有基类成员的同时可添加新的成员,但不能移除已继承的成员。3. 对基类的构造函数和析构函数不能继承。则实例化派生类对象时,将先执行基类的构造函数,再执行自身的构造函数。 析构函数正好相反。class Parent{ public Parent() { Console.WriteLine("Parent Construtor"); } ~Parent()//不建议定义,
阅读全文
摘要:以下是我收集的关于常见字符串处理中易误解的地方:时刻应该记住的是:字符串是引用变量,且在做任何操作后其本身的值保持不变,如要改变其本身的值,则还应对自身重新赋值。string firstName = "Miracle";string lastName = "He";StringBuilder sb = new StringBuilder();sb.Append(firstName);sb.Append(lastName);string name = sb.ToString();//比"+"性能更好string str = name.S
阅读全文
摘要:以简单的小程序为例说明:public class Program { void Main(string[] args) { Console.WriteLine("Welcome, Miracle He"); Console.ReadLine(); }}我们可以使用以下的命令行对以上程序进行编译:csc Welcome.cs: 输出Welcome.execsc /t:library Welcome.cs: 输出Welcome.dllcsc /out:My.exe Welcome.cs: 输出My.execsc /t:library /out:Welc...
阅读全文