DotNet规范的委托和事件写法:
public delegate void EventHandler(object sender, EventArgs e); //定义委托类型
public event EventHandler Click; //声明事件类似于声明了一个封装的委托变量
this.btnOpenDB.Click += new System.EventHandler(this.btnOpenDB_Click方法); //注册方法
private void btnOpenDB_Click(object sender, EventArgs e) //被注册的方法
{
conn = new SqlConnection(conString);
conn.Open();
}
object sender,EventArgs e是什么呢? 阅读全文…
virtual { 有方法体 }
abstract {不能有方法体}
C#的方法引入了virtual、override、sealed、abstract四种修饰符来提供不同的继承需求。类的虚方法是可以在该类的继承C#的方法引入了virtual、override、sealed、abstract四种修饰符来提供不同的继承需求。类的虚方法是可以在该类的继承类中改变其实现的方法,当然这种改变仅限于方法体的改变,而非方法头(方法声明)的改变。被子类改变的虚方法必须在方法头加上override来表示。当一个虚方法被调用时,该类的实例——亦即对象的运行时类型(run-time type)来决定哪个方法体被调用。看下面的例子: 阅读全文…
在C和C++里,更多的是考虑内存管理,程序员要显式的垃圾回收,一不小心就内存泄漏了!然而在C#里,许多的朋友都开始淡忘了,因为C#帮了我们太多的事情,个人认为这不是一件多么愉快的事情,垃圾回收器惰性还是存在的!不过在这内存疯狂扩容的年代,对于中小型项目你完全可以不浪费时间在内存回收上面!
当然了,垃圾回收器也不是万能的,有些事情还是需要我们及时的处理掉,比如数据库连接,网络连接等,怎么样能保证在卸载对象时释放这些呢?这里用到了析构函数,它大大的帮了你这个忙!建立对象有构造函数,来一个析构函数似乎也很合常理!但是要注意的是析构函数只在垃圾回收器开始释放对象所占用的内存时调用它,而不是设置对象null时执行,设置对象null只是段开了内存对象与引用句柄之间的引用关系而已!
析构函数的建立是用“~函数名”格式来建立的,注意:析构函数不能够传入参数,当然也就没有办法重载了!还有说一点:个人认为使用析构函数是一种很好的习惯,但是它不是必须的!
老习惯,下面了一个例子,演示了TestObject对象的建立与移除的构造与析构的过程,TestObject里面我们建立了一个静态成员count来记录TestObject对象的数量,程序清单如下: 阅读全文…
1.override: 父类:public virtual string ToString(){return “a”;}
子类:public override string ToString(){return “b”;}
2.overload: 同一类中或父子关系类中皆可.
public string ToString(){return “a”;}
public string ToString(int id){return id.ToString();}
override是用于重写基类的虚方法,这样在派生类中提供一个新的方法;重载是提供了一种机制, 相同函数名通过不同的返回值类型以及参数来表来区分的机制
阅读全文…
这篇文章是我几个月前写的,今天进行了比较大的修订,重新发了出来,希望和大家共同探讨,并在此感谢Anytao的讨论和帮助。
从概念上看,值类型直接存储其值,而引用类型存储对其值的引用。这两种类型存储在内存的不同地方。在C#中,我们必须在设计类型的时候就决定类型实例的行为。这种决定非常重要,用《CLR via C#》作者Jeffrey Richter的话来说,“不理解引用类型和值类型区别的程序员将会给代码引入诡异的bug和性能问题(I believe that a developer who misunderstands the difference between reference types and value types will introduce subtle bugs and performance issues into their code.)”。这就要求我们正确理解和使用值类型和引用类型。 阅读全文…
string.Empty就相当于”"
一般用于字符串的初始化
比如:
string a;
Console.WriteLine(a);//这里会报错,因为没有初始化a
而下面不会报错:
string a=string.Empty;
Console.WriteLine(a);
或者用于比较:
if(a==”")
if(a==string.Empty)
上面两句是一样的效果。 阅读全文…
对于Eclipse中的SVN工具大家并不陌生,但说起Subversion服务器环境的搭建,大家也许会觉得有些陌生。这里我给出了搭建 Subversion服务器的快速步骤及可能会遇到的问题,帮助大家轻松完成自己SVN版本管理。 本文可分为两大部分,一是windows环境下使用桌面客户端工具来搭建SVN服务器环境,二是Eclipse下SVN插件的使用。文中有部分内容引自subversion中文站,感谢他们的创作。
- 使用桌面客户端工具搭建SVN服务器环境 阅读全文…
WebRequest类和WebResponse类
WebClient类使用起来比较简单,但是它的功能非常有限,特别是不能使用它提供身份验证证书。这样,在上传数据时问题就出现了,许多站点都不会接受没有身份验证的上传文件。尽管可以给请求添加标题信息并检查响应中的标题信息,但这仅限于一般意义上的检查,对于任何一个协议,WebClient没有具体的支持。由于WebClient是通用的类,主要用于处理发送请求和接收响应的协议(例如HTTP、 阅读全文…
一.多线程的概念
Windows是一个多任务的系统,如果你使用的是windows 2000及其以上版本,你可以通过任务管理器查看当前系统运行的程序和进程。什么是进程呢?当一个程序开始运行时,它就是一个进程,进程所指包括运行中的程序和程序所使用到的内存和系统资源。而一个进程又是由多个线程所组成的,线程是程序中的一个执行流,每个线程都有自己的专 阅读全文…
文章摘要:
CGI规定了Web服务器调用其他可执行程序(CGI程 序)的接口协议标准。Web服务器通过调用CGI程序实现和Web浏览器的交互。CGI程序可以用任何程序设计语言编写,如Shell脚本语言、Perl、Fortran、Pascal、C语言等。但是用C语言编写的CGI程序具有执行速度快、安全性高等特点。本文详细分析了用C语言进行CGI程序设计的方法、过程和技巧。
正文: 用C语言进行CGI程序设计 阅读全文…