黑马程序员----C#面向对象自学笔记

---------------------- Windows Phone 7手机开发.Net培训、期待与您交流! ----------------------

一 类和结构(classes and structs) 

    类是一种“引用类型”。创建类的对象时,对象赋值到的变量只保存对该内存的引用。将对象引用赋给新变量时,新变量引用的是原始对象。通过一个变量做出的更改将反映在另一个变量中,因为两者引用同一数据。

    结构是一种值类型。创建结构时,结构赋值到的变量保存该结构的实际数据。将结构赋给新变量时,将复制该结构。因此,新变量和原始变量包含同一数据的两个不同的副本。对一个副本的更改不影响另一个副本。类通常用于对较为复杂的行为建模,或对要在创建类对象后进行修改的数据建模。结构最适合一些小型数据结构,这些数据结构包含的数据以创建结构后不修改的数据为主。

    类通常用于对较为复杂的行为建模,或对要在创建类对象后进行修改的数据建模。 结构最适合一些小型数据结构,这些数据结构包含的数据以创建结构后不修改的数据为主。 

二.集合类(collections)

    集合类定义为 System.CollectionsSystem.Collections.Generic 命名空间的一部分。

    大多数集合类都派生自ICollectionIComparerIEnumerableIListIDictionaryIDictionaryEnumerator 接口以及它们的等效泛型接口。

    使用泛型集合类可以提供更高的类型安全性,在某些情况下还可以提供更好的性能,尤其是在存储值类型时,这些优势会体现得更明显。

    ArrayList list = new ArrayList();

    list.Add(10);

    list.Add(20);

三.委托和事件(delegates and events) /********************重点解析********************/

    委托是一种定义方法签名的类型。 当实例化委托时,您可以将其实例与任何具有兼容签名的方法相关联。 您可以通过委托实例调用方法。

委托用于将方法作为参数传递给其他方法。事件处理程序就是通过委托调用的方法。您可以创建一个自定义方法,当发生特定事件时某个类(例如 Windows 控件)就可以调用您的方法。下面的示例演示了一个委托声明:  

   public delegate int PerformCalculation(int x, int y);
  与委托的签名(由返回类型和参数组成)匹配的任何可访问类或结构中的任何方法都可以分配给该委托。 方法可以是静态方法,也可以是实例方法。 这样就可以通过编程方式来更改方法调用,还可以向现有类中插入新代码。 只要知道委托的签名,就可以分配您自己的方法。
  

委托具有以下特点:

  • 委托类似于 C++ 函数指针,但它们是类型安全的。

  • 委托允许将方法作为参数进行传递。

  • 委托可用于定义回调方法。

  • 委托可以链接在一起;例如,可以对一个事件调用多个方法。

  • 方法不必与委托签名完全匹配。

    以下通过董事长与员工之间的事件监测类代码来解释事件与委托之间的关系:

     public delegate void DelegateClassHandle();

     public class Employee

    {

            public event DelegateClassHandle PlayGame;

            public void Games()

            {

                    if(PlayGame != null)

                    {

                             PlayGame();

                    }

            }

    }

    public class Admin

    {

            public void Notify()

            {

                    System.Console.Write("Someone is playing game!");

            }

    }

    Employee的事件PlayGame是如何与Admin的Notify方法关联起来的呢?只需通过事件绑定即可实现,具体过程如下事例代码:

    Employee.employee = new Employee();

    Admin admin = new Admin();

    employee.PlayGame += new DelegateClassHandle(admin.Notify);

    当Employee中的Games方法执行后,将触发事件函数PlayGame,而该事件将委托给admin.Notify()函数进行处理。

从而通过DelegateClassHandle委托将两个类的交互进行了绑定。

  下代码事例表示带参数的事件委托方式。

public class CustomEventArgs : EventArgs

{

       sring name = “”;

       int age = 0;

       public CustomEventArgs() {}

       public string Name

{

       get{return this.name;}

       set{ this.name = value;}

}

public int Age

{

       get{return this.age;}

       set{ this.age=value;}

}

}

public delegate void DelegateClassHandle(object sender, CustomEventArgs e);

 

public class Employee

{

       private string _name;

       public string Name()

       {

       get{return this._name;}

       set{ this._name=value;}

       }

       private int _age;

       public int Age()

       {

              get{ retrun this._age;}

              set{ this._age=value;}

       }

       public event DelegateClassHandle PlayGame;

       public void Games()

       {

              if(PlayGame!=null)

              {

                     CustomEventArgs e = new CustomEventArgs();

                     e.name = this._name;

                     e.age = this._age;

                     PlayGame(this,e);

              }

       }

}

public class Admin

{

       public void Notify(object sender, CustomEventArgs e)

       {

              System.Console.Write(e.Name+”is”+e.Age.ToString());

       }

}

 

关联代码:

Employee employee = new Employee();

employee.Name = “董伟”;

employee.Age = 24;

Admin admin = new Admin();

employee.PlayGame += new DelegateClassHandle(admin.Notify);

employee.Games();

---------------------- Windows Phone 7手机开发.Net培训、期待与您交流! ----------------------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值