C#简洁快速,容易上手,用起来很顺。打比方,C#更像邻家MM,容易接近,C++更象女博士,受人尊重。VB.net更象灌篮高手,什么都能做,什么都不缺。
1.构造函数
类中特殊的方法,多用于初始化实例的数据成员。在实例化new时被自动调用。特点:函数名与类名总是相同,没有返回值。
通过重载(Overload 参数列表不同),构造函数可以任意多。
构造函数之间可以相互调用。
可使用访问修饰符。如果是Protected是可以继承,如果是Private则无法由new和子类调用,有时设计模式中可能使用“工厂模式”来Create一个类的实例。
如果没有显式定义,那么系统提供一个不带任何参数的public的构造函数。
支持静态构造函数。
2.属性
属性内部看像函数,外部看象字段;
读写由get/set存取器来进行,没有参数列表。
对属性的使用可以象给公有字段赋值一样轻松,同时允许通过get/set来控制对属性的访问。
如:
public decimal Balance //不带括号
{
get{return this.m_Balance;}
set
{
if(value<0.0M);
else
this.m_Balance = value ;//这是关键字,代表传递过来的值。
}
调用:
bc.Balance = bc.Balance - amt;//先调用get然后又使用了set
3.索引器
是一类特殊的属性,通过它们可以象处理数组一样处理对象。通常在代表元素集合的类中定义。
索引器类似于属性,属性名是this,意思是回引类的当前实例,参数列表包含在方括号而非括号之内。
如:
public Person this[int index]
{
get
{
return relatives[index];
}
set
{
if (value != null)
{
relatives[index]=value;
}
}
}
调用方法:
bc[10] = new Person("Name");
4.代理/委托
委托类似于C++的函数指针,但不同点在于delegate完全面向对象——既封装方法又封装对象实例。定义委托实际是定义一个类型的委托,不是一个具体的实例。委托类型指定它代表的方法的返回类型和参数表,可代表具有相同参数列表和返回类型的任何方法。
如:
定义:
public delegate double DelegateCompute(double x);
使用委托时通过输入委托实例的名称和要传递给委托所表示的方法的参数 。
public static double compute(double t, DelegateCompute dc)
{
return dc(t);
}
创建委托实例时使用new字。如:
ProcessAnything pa = new ProcessAnything(account.Withdraw);
括号里面是实例方法,此方法必须和代理声明时的返回类型和参数列表相同。
多播委托——引用多个方法的委托,它连续调用每个方法。为了把委托的单个实例合并为一个多播委托,委托必须是同类型的,返回类型必须是void,不能带输出参数(可以带引用参数)。多播委托应用于事件模型中。
委托是一个类!
5.事件
C#中使用委托模型来实现事件。事件处理方法不必在生成事件的类中定义,需要做的就是把事件源和事件处理程序结合起来。使用事件处理委托(事件委托)可以定义为生成事件类的一个成员,事件委托是多播的。
形式:
public delegate void MouseEventHandler(object source,EventArgs e);
object source :事件源
EventArgs:System.EventArgs类的实例或派生类实例,它包含事件的另外的信息。
.NET Framework定义了大量的事件处理委托,如:
public delegate void KeyEventHandler(object source,KeyEventArgs args);
public delegate void MouseEventHandler(object source,MouseEventArgs args);
…………
用户可以自定义事件委托:
public delegate void NameEventHandler(object source,NewEventArgs e);
必须自己来定义NameEventArgs类。
要创建事件委托的实例不使用new关键字,使用event关键字:
public event NameEventHandler handler;
要触发事件,可以把事件委托的一个实例定义为类的成员,确定何时生成事件代码,定义生成提供事件的EventArgs对象的代码。