C#基础学习笔记(中)

第十课:索引器
1.索引器比类数组效率高
2.索引器提供了把数组封装到类中的方法,可以更好的提高数据安全性。
3.索引器比数组更为灵活,可以使用字符传作为索引值(使用Hashtable)
4.索引器可以重载 
  语法实例
  class SampleCollection<T> //带索引器的泛型类
{
    private T[] arr = new T[100];
    public T this[int i]
    {
        get
        {
            return arr[i];
        }
        set
        {
            arr[i] = value;
        }
    }
}

第十一课:委托(delegate)
11-1
委托是一种引用方法的类型。一旦为委托分配了方法,委托将与该方法具有完全相同的行为。委托方法的调用可以像其他任何方法一样,具有参数和返回值,如下面的示例所示:
1.语法实例:委托是隐含的静态方法
  delegate void EatDelegate(string food);
  EatDelegate zs = new EatDelegate(zsSell);
  zs("西瓜");
2.委托链
  EatDelegate eat;
  eat = zs+ls+ww; eat-=ww; eat+=ww;
3.匿名方法建立委托
  EatDelegate eat = null
  eat+=delegate(string food){Console.WriteLine("张三卖"+food)};
  eat+=delegate(string food){Console.WriteLine("李四买"+food)};
  eat+=delegate(string food){Console.WriteLine("王五偷"+food)};
  eat("西瓜");
4.把委托作为方法的参数进行传递
  eatTogeter("西瓜",zs,ls,ww)

  第十二课:事件
  事件发行者(Publisher)
  事件订阅者(Subscriber)
 
  事件声明
  public delegate void Publish(); //声明委托作为事件代理
  public event Publish OnPublish; //声明事件

  定义事件的四个步骤
  1.在事件发行者中定义一个事件,event关键字
  2.在事件发行者中触发事件,先判断事件是否为空(委托链是否为空)
  3.在事件订阅者中定义事件处理程序,处理程序必须与委托类型相同(有相同的返回这和参数)
  4.向事件发行者订阅一个事件

  .NET Framework事件设计准则
  1.事件的命名准则应使用PascalCasing命名方式
  2.声明delegate时,使用void类型作为返回值,EventName事件的事件委托是EventNameEventHandler
    事件接受两个传入参数,一律命名为sender和e
  3.定义一个提供事件数据的类。对类以EventNameEventArgs进行命名,从System.EventArgs派生该类,
    然后添加所有事件特定成员。
    public delegate void EventNameEventHandler(object sender,EventNameEventArgs e);
  4.如果事件不需要传递任何数据,也要声明两个参数,e参数可以直接使用系统提供的System.EventArgs类。
    如果需要传递参数则要从System.EventArgs继承一个类,并把数据放在里面。
    public delegate void EventNameEventHandler(object sender,EventArgs e);
    public event EventNameEventHandler EventName;
  5.在引发事件的类中提供一个受保护的方法,以OnEventName进行命名。在该方法中引发该事件
  protected virtual void OnEventName(EventArgs e)
  {
 if(EventName!=null)
 {
  EventName(this,e);
 }
  }
    
 
第十三课:虚方法 virtual 类的多态
1.new关键字 派生类的实例新建了一个同名的方法,实例中存在N个同名方法但功能不同,可以通过派生类和基类的类型转换分别访问
2.virtual override 派生类实例重写了自身所继承的基类的方法,使实例中存在多个同名同功能的方法,可以通过派生类和基类的类型转换分别访问
3.通过动态绑定(晚绑定)实现基类实例的多态。
4.base关键字调用基类的方法base.F();

第十四课:抽象类 abstract
1.声明语法
abstract class A
{
 protected int _x;
 abstract public int X; //抽象属性
 {
  get;
  set;
 }
 abstract public void F(); //抽象方法
}

2.抽象类的构造函数
3.使用抽象类数组实现多态 A[] a = new A[3]

当所有子类使用相同功能时倾向使用虚方法,使用base调用
若子类没有相同的功能则使用抽象类

第十五课:接口
声明语法:
interface IDrivingLicence
{
 void GetLicence(); //隐含具有public属性
}

class Teacher:IDrivingLicence
{
 public void GetLicence() //必须使用public
 {
  //实现语句
 }
}
接口成员
属性、方法、事件、索引器

posted on 2010-02-22 13:10  桓源  阅读(256)  评论(0)    收藏  举报

导航