随笔分类 - C#语言
摘要:面向接口编程,将定义与实现分开在不同的地方,从更广的面来理解接口,它可以是interface与abstract class一、面向接口编程有什么好处?首先,小的项目确实可以直接对接实现类,免得麻烦。如果是大项目我理解有两点好处:一是可以利用接口实现IOC(控制反转),模块间依赖接口,而不是依赖实现类...
阅读全文
摘要:刚在园子里看到一篇文章《精简自己20%的代码》,原文链接:http://www.cnblogs.com/xcj26/p/3442089.html;觉得好就在这里推荐一下。 其中一处传参数的时候,用到了Lambda表达式,形参为一个Action委托对象:Action ation,实参为一个Lambda表达式:() => result = Save(accountData);就是这一个Lambda表达式,半天没有看懂。因为平时用的都是如 list.where(c=>c.name=="aa");这种简单形式。翻了一遍书才想起来,原来Lambda表达式是以=>把一
阅读全文
摘要:一、委托部分“委托”是一种指向一个类的静态方法,或者实例方法的数据结构,委托类似于 C++ 函数指针,但它是类型安全的。委托允许将方法作为参数进行传递,一旦为委托分配了方法,委托就将与该方法具有完全相同的行为。委托主要用在两个方面:其一是CallBack(回调)机制;其二是事件处理机制。什么是回调,...
阅读全文
摘要:大概的描述C#中“Attribute”一般译为“特性”,我有时也读成“标注”。下面先看一个微软自定义的特性:[Serializable] public class UserInfo { ............ }像这样子,在一个类或者方法前面,贴上一个类似[Serializable]的标签,然后它就会起一些特别的作用了,Serializable就表示这个类是可序列化的,使用起来也就这么简单。那么,它是怎么工作的呢?我听过有人打过一个这样的比喻:就像是拆迁的在一栋房子上画了一个“拆”,然后就表示这个房子可以拆了,但我们应该知道,后面这栋房子被拆了,并不是这个“拆...
阅读全文
摘要:当我们建立一个小的应用程序而并非是一个真正的项目的时候,可能经常会要把它拷贝到不同的机器上去运行,这个时候,我觉得就没必要把数据库(我这里以sqlserver为例)和程序分开单独的建立在自己的电脑上了,因为程序一动,还要拷贝数据库文件,这样一来就麻烦了。我们可以直接把数据库建立在项目里面。 这样一来,移动项目的时候,把项目拷走,数据库文件就一起跟着走了,但是这样可能还会有一个问题,如果我们之前使用的连接字符串是直接从程序中的数据库测试连接那里面拷贝过来的话,就会出现路径不对的问题。我以前学习ADO.NET的时候,就经常这样做。直接从这里面去拷贝。拷贝出来的字符串是这样的:Data Sourc.
阅读全文
摘要:我们都知道,const和static readonly的确很像:通过类名而不是对象名进行访问,在程序中只读等等。在多数情况下可以混用。二者本质的区别在于,const的值是在编译期间确定的,因此只能在声明时通过常量表达式指定其值。而static readonly是在运行时计算出其值的,所以还可以通过静态构造函数来赋值。明白了这个本质区别,我们就不难看出下面的语句中static readonly和const能否互换了:1. static readonly MyClass myins = new MyClass();2. static readonly MyClass myins = null;3.
阅读全文
摘要:在使用foreach对List进行遍历的时候,如果其中间list的数据发生了改变,是会报错的。那么,当我们有这种需求的时候,怎样才能解决这个问题呢? 下面,看一种解决的方式: foreach(string s in list.ToArray()){}; 这样就行了,先把list中的数据ToArray();这个时候,数据组中的数据其实就已经与list中的数据不是同一数据了。
阅读全文
摘要:1、发送普通文本邮件MailMessage mailMsg = new MailMessage();//两个类,应该引入System.Net.Mail; mailMsg.From = new MailAddress("123456@qq.com", "张三");//源邮件地址 mailMsg.To.Add(new MailAddress("456789.com", "李四"));//目的邮件地址。可以有多个收件人 mailMsg.Subject = "这里是邮件主题";//发送邮件的标题 mai
阅读全文
摘要:参数传递有传值、传址和引用三种void f(int n){}//定义传值方式int a;f(a);//调用传值方式void f(int *n){}//定义传址方式int a;f(&a);//调用传址方式void f(int &n){}//定义引用方式int a;f(a);//调用引用方式传值方式适合一般数值传送,并且不改变原数据,但要消耗内存空间传址方式适合传递数组、指针,由于传递的是地址,所以直接操作会改变原数据引用方式和指针比较类似,是相对比较新的一种方式,一般情况下能用传址的就能用引用,而且用引用更方便一点。
阅读全文
摘要:C#中的字符串格式String.FormatString.Format()和ToString()是一回事。就是给个参数,再给个字符串格式,然后按照给定的格式输出参数。详细信息可以在这个链接看到,http://msdn.microsoft.com/zh-cn/library/fbxft59x.aspx Topic: Formatting Types1. 标准数字格式----- C 或者c , 货币。默认是小数点后两位,有时候后面跟个数字,比如C3,就是小数点后三位的意思。不同的文化设置,前面的货币符号是不同的。double money = 123.456;money.ToString("
阅读全文
摘要:C#中重载运算符的语法和其它语言差不多,比起C++来,它多一个限制,重载运算符的这个方法必须是public static的下面以重载+为例:using System;using System.Collections.Generic;using System.Text;namespace 运算符重载{ class fushu { public fushu(int varA, int varB) { this.A = varA; this.B = varB; } //把成员变量定义成公有...
阅读全文
摘要:lIQueryable接口与IEnumberable接口的区别: IEnumerable 泛型类在调用自己的SKip 和 Take 等扩展方法之前数据就已经加载在本地内存里了,而IQueryable 是将Skip ,take 这些方法表达式翻译成T-SQL语句之后再向SQL服务器发送命令。也是延迟在我要真正显示数据的时候才执行。
阅读全文
摘要:Readonly和Const在初值定下来之后都只读不可写。Readonly是“只读变量”,Const才是“真常量”。Const的值是在编译时内联到引用程序集当中,也就是写死了,如果程序集A引用了含有Const常量的程序集B,那么程序集A看到的Const常量就是一个固定的值,如果这个值变了,那么程序集B中的新值要重新编译一遍才能被A识别。而使用Readonly的话,值是运行时确定的,就是说程序集A在程序集B中动态获取了一把。比较:conststatic readonlyreadonly初始化的时机声明时声明时或构造函数声明时或构造函数值确定的时机编译时运行时运行时可定义的位置字段或函数内的局部常
阅读全文
摘要:我们在借助于sqlHelper使用ExecuteDataReader的时候,是不能立即使用using关键字和自动调用dispose或者close来关闭数据库的连接的。为什么?因为DataReader不像SqlDataAdapter,会将查询到的结果放到一个DataSet中,然后断开与数据库的连接。DataReader必须保持与数据库的长期连接。那么怎么样来使得它在用完之后进行释放呢?ExecuteReader有一个重载的方法,ExecuteReader(CommandBehavior.CloseConnection); 看下面的一个具体的例子。public static SqlDataR...
阅读全文

浙公网安备 33010602011771号