Elijah

治愈系代码研究基地
  首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

随笔分类 -  C#语言

摘要:开始写读书笔记,迈出从菜鸟到成熟的第一步!Readonly和Const在初值定下来之后都只读不可写。Readonly是“只读变量”,Const才是“真常量”。Const的值是在编译时内联到引用程序集当中,也就是写死了,如果程序集A引用了含有Const常量的程序集B,那么程序集A看到的Const常量就是一个固定的值,如果这个值变了,那么程序集B中的新值要重新编译一遍才能被A识别。而使用Readonly的话,值是运行时确定的,就是说程序集A在程序集B中动态获取了一把。比较: conststatic readonlyreadonly初始化的时机声明时声明时或构造函数声明时或构造函数值确定的时机编.. 阅读全文

posted @ 2012-03-17 15:30 Elijah 阅读(751) 评论(1) 推荐(1)

摘要:就不解释抽象工厂是什么了,直接上代码:两个具体类:public Department(){ Console.WriteLine("创建了一个Department");}public User(){ Console.WriteLine("创建了一个User");}负责Department的interface IDepartment{ void Insert(Department department); Department GetDepartment(int id);}class AccessDepartment : IDepartment{ publi 阅读全文

posted @ 2011-12-26 15:58 Elijah 阅读(381) 评论(0) 推荐(0)

摘要:Socket可以理解成一个IP地址加一个端口,构成的一个“插座”...的确这个词很形象,有了它,我们就相当于给程序上打了个插槽,于是其他程序就可以通过网络“插”进来了~在客户端上我们只需要一个Socket,但是在服务端上,我们需要用一个Socket来监视某端口,然后根据来访的客户端来建立新的Socket负责数据通信。代码总结如下:服务端: 1 //1.服务器端定义用于监听的Socket对象: 2 Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 3 //设定I 阅读全文

posted @ 2011-11-29 19:42 Elijah 阅读(1611) 评论(0) 推荐(0)

摘要:有这样一个需求,一个小程序,上面有一个文本框和一个按钮,要求按下按钮时文本框里的内容从0循环变化到10000。乍一看这不就是一个循环修改字符串嘛!可是写出来一运行,就会发现点按钮的时候程序卡死!因为在同一个进程当中,代码是顺序执行的,我们同样可以让程序在初始化加载的时候就循环更新数字,结果就是循环还没执行完的时候窗口不显示,还是一种卡死的效果。一种有效的办法就是给这个循环单开辟一个线程。在按钮click事件里,开启一个新线程,Test是一个方法,这里传进的是个委托。1 Thread th = new Thread(Test);然后给这个线程定义为后台线程,让主窗体关闭时这个也关闭。1 th.I 阅读全文

posted @ 2011-11-28 20:18 Elijah 阅读(839) 评论(0) 推荐(0)

摘要:今天来复习赵老师讲过的旧知识!知识点:文件的按行读写、正则提取组。这次我加了详细的注释,完全就是面向过程,跟着思路一步一步走的,其实写程序就是跟着思路来,有思路,就有代码!非C#玩家应该也能看得懂。(注:C#中的using块的作用是自动释放非托管资源。)这段演示代码的用途是把大街网上的求职信息的单位名称和链接地址按照一定格式提取到一个文本文件里。假设页面是“1.htm”、输出为“1.txt”(实际应用中不会写死的),效果是编号-名称-地址-换行,如下:7.名称:某某某公司招聘某某某职位地址:http://job.dajie.com/xxxxx.html代码: 1 //首先要读取文件,建立一个文 阅读全文

posted @ 2011-11-23 21:01 Elijah 阅读(406) 评论(1) 推荐(0)

摘要:1 //计算字符串MD5 2 public static string GetStringMd5(string txt) 3 { 4 MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider(); 5 string result = ""; 6 byte[] bytes = Encoding.ASCII.GetBytes(txt); 7 byte[] cryptBytes = md5.ComputeHash(bytes); 8 foreach (byte item in cryptBytes... 阅读全文

posted @ 2011-11-22 19:48 Elijah 阅读(364) 评论(2) 推荐(0)

摘要:1 MailMessage mail = new MailMessage(); 2 mail.From = new MailAddress("发件人邮箱"); 3 mail.To.Add(new MailAddress("收件人邮箱")); 4 mail.Subject = "标题字符串"; 5 mail.Body = "内容字符串"; 6 mail.Attachments.Add(new Attachment(@"附件地址")); 7 SmtpClient sc = new SmtpClien 阅读全文

posted @ 2011-11-22 19:46 Elijah 阅读(326) 评论(1) 推荐(1)

摘要:前几天讲到了子窗体给父窗体传值的问题,在此总结一下。这里就不讨论全局变量和静态变量之类的高耦合方式了,只讨论利用接口传父窗口指针和使用委托这两种耦合度相对较低的方式,具体怎么用看需求,没有哪个好哪个不好。在这个例子中,我们有父窗体Form1和子窗体Form2,里面各有一个的文本框txt1和txt2,各有一个按钮。一、接口法首先要新建一个.cs文件写一个接口,内容如下:1 public interface ITxt2 {3 void setTxt(string txt);4 }然后让主窗体Form1实现这个接口,1 void ITxt.setTxt(string txt)2 {3 ... 阅读全文

posted @ 2011-11-21 20:51 Elijah 阅读(685) 评论(0) 推荐(0)

摘要:读取XML文档内信息的操作与写操作类似,首先要加载一个XML文件成为一个可操纵的对象。假设我们有个XML文件叫student.xml。1 XDocument xDoc = XDocument.Load("students.xml");之后要获取根节点1 XElement xeRoot = xDoc.Root;如果我们想取得某一节点的话:1 //根据标签名获取某一个节点2 XElement xe1 = xeRoot.Element("标签名");3 //输出节点名4 Console.WriteLine(xe1.Name);5 //输出节点下所有元素的值6 阅读全文

posted @ 2011-11-03 18:44 Elijah 阅读(523) 评论(0) 推荐(0)

摘要:今天来复习旧知识。XML是最常见的文档格式,如何利用C#语言来读写XML文档呢?先来说写文档:第一步,先new一个XML文档:1 XDocument xDoc = new XDocument();XML都有根节点,我们新建一个根节点:1 XElement xeRoot = new XElement("树根");给树根增加一个子树,并且绑定到树根上:1 XElement xe1 = new XElement("子树");2 xeRoot.Add(xe1);给这个子树加两个属性:1 XAttribute xe1_a1 = new XAttribute(&qu 阅读全文

posted @ 2011-11-03 18:31 Elijah 阅读(422) 评论(0) 推荐(0)

摘要:昨天是在传智播客学习的第九天,我们威武的赵晓虎老师讲解了事件的应用,下面结合自己的一些经验和理解,把事件在自定义控件中的效用总结了一下,欢迎指正!事件,就是封装后的委托,如果把委托看成字段,那事件就是属性了,其实就是把委托做了个阉割而已,阉割后的委托只能+=和-=。这次要实现的效果是,自己定义一个控件,上面有两个textbox,分别叫txtLoginId和txtLoginPwd,还有个叫btmLogin的按钮,控件的用途是让用户输入的用户名和密码,然后点登陆。如果用户名和密码正确,登陆成功,则两个textbox变为绿色,失败则变为红色。首先建立一个用户自定义控件,把零部件拖进去。然后建立一个客 阅读全文

posted @ 2011-10-30 19:58 Elijah 阅读(748) 评论(2) 推荐(0)

摘要:要把一个复杂对象弄成一个文件发给别人的话,自己定义存储格式要费很大的周折,不过微软早就帮咱们把算法写好了,只要套用一个函数就OK了!越来越觉得C#便捷了!序列化: 1 //1.序列化: 2 //给所有要序列化的类、父类、成员的类添加[Serializable]特性 3 //创建写的文件流 4 FileStream fs = File.Create("person.bin"); 5 using (fs) 6 { 7 //创建一个序列化器 8 BinaryFormatter bf = new BinaryFormatter(); 9 //执行序列化10 bf.Ser... 阅读全文

posted @ 2011-10-27 10:46 Elijah 阅读(328) 评论(0) 推荐(0)

摘要:今天老师给总结了一遍常用的两个集合List与Dictionary并带着写了一些小工具程序,这两个例子感觉非常实用!笔记如下: 1 常用集合: 2 1.可变长数组:ArrayList(非泛型)->List<T>(泛型) 3 属性:Capacity容量 4 Count实际存储的数量 5 方法:Add(object obj)增加元素,什么都可以放进去。 6 AddRange(ICollection c)可以直接加进一个数组或集合。 7 Remove()和RemoveAt(下标)删除元素。 8 Clear()清除所有元素。 9 TrimToS... 阅读全文

posted @ 2011-10-25 20:35 Elijah 阅读(254) 评论(0) 推荐(0)