第四讲 C#中类的设计

构造函数Construcotr
类中特殊的方法,多用于初始化实例的数据成员,在实例化New时被自动调用。
函数名与类名总是相同,没有返回值。
通过重载,构造函数可以任意多。
构造函数间的调用。
public BankCustomer(string fn, string ln, double bal)
  {
   this.firstName = fn;
   this.lastName  = ln;
   this.balance   = bal;
  }
public BankCustomer(string fn, string ln) 
   : this(fn, ln, 0.0)
  { }

如果没有显示定义,那么系统提供一个不带任何参数的Public的构造函数。

*属性Property
内部看像函数,外部看像字段
读/写由get/set存取器来进行(没有参数列表)
可以像给公有字段赋值一样轻松,同时允许通过get/set来控制对属性的访问。

*索引器Indexer
索引器就是一类特殊的属性,通过它们你就可以像处理数组一样处理对象。
索引器通常在代表元素集合的类中定义
索引器类似于属性
属性名是this,意思是回引类的当前实例,参数列表包含在方括号而非括号之内。

*委托Delegate
想象成C++中的函数指针,但不同点在于Delegate完全面向对象的--既封装方法又封装对象实例。
定义委托实际上是定义一个类型的委托,不是一个具体的实例。
委托类型指定它代表的方法的返回类型和参数表
它代表具有相同参数列表和返回类型的任何方法。
委托的声明方式和方法的声明相似,包括的是Delegate关键字
声明中必须包括委托所表示的方法的返回类型和参数列表。
<modifiers> delegate <return_type> <delegate_name>(argument_list)
public delegate bool ProcessAnything(double d);
创建委托实例--New关键字
ProcessAnything pa=new ProcessAnything(account.Withdraw);
括号里面是实例方法,此方法必须和代理声明时的返回类型和参数列表相同。
委托的调用时通过输入委托实例的名称和要传递给委托所表示的访法的参数
public class NoneyCompute
{
 public static double Compute(double t,DelegateCompute dc)
{
 return dc(t);
}
}

public delegate double DelegateCompute(double x);

多播委托--引用多个方法的委托,它连续调用每个方法。
为了把委托的单个实例合并为一个多播委托,委托必须是同类型的,返回类型

必须是void,不能带输出参数(可以带引用参数)。
多播委托应用于事件模型中。
------------------------
*事件Event
C#中使用委托模型来实现事件
事件处理方法不必在将生成事件的类中定义
需要做的事情就是把事件源和事件处理程序结合起来。
使用事件处理委托,简称事件委托可以定义为生成事件的类的一个成员。
事件委托是多播的。
事件委托的形式:
public delegate void MouseEventHandler(object source,EventArgs e);
objectsource:事件源
EventArgs:System.EventArgs类的实例或派生类实例,包含事件的另外的信息
.Net Framework定义了大量的事件处理委托。

用户自定义事件委托
public delegate void NameEventHandler(objectsource,NewEventArgs e);
必须自己来定义NameEventArgs类
创建事件委托的实例
不使用New关键字,使用event关键字
public event NameEventHandler nameListEvent;

触发事件
把事件委托的一个实例定义为类的成员。
确定何时生成栆年代码。
定义生成提供事件的EventArgs对象的代码。

posted @ 2009-02-26 16:33  teacherzj  阅读(396)  评论(0编辑  收藏  举报