学点C# 4 继承 & 事件

原创 2011年01月12日 17:52:00

继承

  • :相当于 extends & implements
  • base相当于super
  • 选择构造函数“:base()”
    • public class ColorCoOrds : CoOrds
      {
          public System.Drawing.Color color;
      
          public ColorCoOrds() : base ()
          {
              color = System.Drawing.Color.Red;
          }
      
          public ColorCoOrds(int x, int y) : base (x, y)
          {
              color = System.Drawing.Color.Red;
          }
      }
  • Java 和 C# 的一个重要区别是:默认情况下,Java 方法被标记为 virtual,而在 C# 中,必须使用 virtual 修饰符将方法显式标记为 virtual。属性访问器和方法均可以重写,它们的重写方法非常相似。
  • 在派生类中,已重写的方法是使用 override 修饰符声明的。它代替基类中具有相同名称和签名的方法或属性。
  • 要重写的基方法必须声明为 virtualabstract 或 override:不能按此方式重写非虚方法或非静态方法。已重写和正在重写的方法或属性必须具有同样的访问级别修饰符。
    • public class CountClass 
      {
          public int count; 
      
          public CountClass(int startValue)  // constructor
          {
              count = startValue;
          }
      
          public virtual int StepUp()
          {
              return ++count;
          }
      }
      
      class Count100Class : CountClass 
      {
          public Count100Class(int x) : base(x)  // constructor 
          {
          }
      
          public override int StepUp()
          {
              return ((base.count) + 100);
          }
      }
      
      class TestCounters
      {
          static void Main()
          {
              CountClass counter1 = new CountClass(1);
              CountClass counter100 = new Count100Class(1);
      
              System.Console.WriteLine("Count in base class = {0}", counter1.StepUp());
              System.Console.WriteLine("Count in derived class = {0}", counter100.StepUp());
          } 
      }
      
       
  • abstract关键字同Java
  • 接口声明方式与 Java 中的声明方式相同。在接口定义中,属性仅指示它的类型,并仅通过 get 和 set 关键字指示它为只读、只写还是读/写。如果为某个接口成员指定了任何修饰符,编译器将产生一个错误。以下接口声明一个只读属性:
    • public interface ICDPlayer
      { 
          void Play();  // method signature
          void Stop();  // method signature
      
          int FastForward(float numberOfSeconds);
      
          int CurrentTrack  // read-only property
          {
              get;
          } 
      }
  • 实现多重接口 public class CDAndDVDComboPlayer : ICDPlayer, IDVDPlayer
  • 派生类可以使用方法的完全限定名称表明此派生类属于哪个接口,从而解决冲突,这与 ICDPlayer.Play() 中一样

 

事件

  • 与 Java 中的事件处理(通过实现自定义侦听器类执行)不同,C# 开发人员可以使用委托进行事件处理。委托是一种封装方法的类型。一旦使用方法初始化委托后,委托的行为方式就与该方法完全相同,且可以使用 () 运算符调用。它与 C++ 函数指针类似,但它是类型安全的。您可以通过委托调用方法。委托用于将方法作为参数传递给其他方法。
  • 与委托的签名(由返回类型和参数组成)匹配的任何可访问类或结构中的任何方法都可以分配给该委托。方法可以是静态方法,也可以是实例方法。这样就可以通过编程方式来更改方法调用,还可以向现有类中插入新代码。只要知道委托的签名,就可以分配您自己的方法。例如,可以向排序算法传递对比较两个对象的方法的引用。分离比较代码使得可以采用更通用的方式编写算法。
    • public delegate int PerformCalculation(int x, int y);

      在 Windows 用户界面编程中,通常使第一个参数作为引用事件源的对象,使第二个参数作为携带与事件相关的数据的对象。但是,在 C# 语言中并不强制使用这种形式;只要事件签名返回 void,其他方面可以与任何有效的委托签名一样。

      事件可以使用 event 关键字进行声明,如下例所示:

      public event MyEventHandler TriggerIt;
      

      若要触发该事件,请定义引发该事件时要调用的方法,如下例所示:

      public void Trigger()
      {
          TriggerIt();
      }
      

      若要引发事件,可以调用委托,并传递与该事件相关的参数。然后,该委托将调用已添加到该事件中的所有处理程序。每个事件都可以分配多个处理程序来接收该事件。在这种情况下,该事件将自动调用每个接收方。无论有多少个接收方,引发一个事件都只需调用一次该事件。

      如果希望某个类接收事件,请通过使用 += 运算符向该事件添加委托来订阅该事件,例如:

      myEvent.TriggerIt += myEvent.MyMethod;
      

      若要取消预订事件,请使用 -= 运算符将委托从事件中移除,例如:

      myEvent.TriggerIt -= new MyEventHandler(myEvent.MyMethod);

相关文章推荐

每天学点JQuery(3)—事件

加载DOM:JQuery用$(document).ready()方法来代替JS中的window.onload()方法,但两者之间也存在着细微的差别:window.onload()方法是在网页中所有的元...

学点C# 3 方法 & 不确定参数 & 属性 & Struct & 数组

方法在 C# 中,Main 的首字母大写,而 Java 使用小写的 main。在 C# 中,若要通过引用传递值类型,需要指定关键字 ref 或 out。这两个关键字的区别在于参数初始化的不同。ref ...

【每天学点C语言】-4-指针与函数

玩指针,玩指针,玩指针,玩指针,玩指针,玩指针。。。。。。。 然后就被指针玩了...

学点C#5 运算符重载 索引器 属性 委托

若要重载某个运算符,可以编写一个函数,在其命名运算符之后加上要重载的运算符的符号。例如,可按以下方法重载 + 运算符:publicstatic ComplexNumber operator+(Comp...

每天学点JQuery(4)—动画

1.show()和hide():通过改变高度,宽度,不透明度来显示/隐藏元素。$(function(){ $("a").hide()//通过hide方法隐藏元素 })等价于 $(functio...

每天学点管理学

  • 2013年03月04日 17:07
  • 939KB
  • 下载

十天教你学点偏激TX-1C的原理图

  • 2014年01月20日 22:28
  • 188KB
  • 下载

如何制作一寸。二寸。六寸照片 多学点,以后自己也可以弄哦

希望以后大家再也不用为急着用的一寸照烦恼了,自己制作然后直接拿到相店打印就行了! 首先要知道的数量关系: 6寸=10.2cm×15.2cm 1寸=2.5cm×3.5cm 2寸=3.5cm×5....
  • xlh1991
  • xlh1991
  • 2013年06月23日 16:56
  • 512

计算机图形学点代码

  • 2012年03月19日 13:55
  • 320KB
  • 下载

每天学点FPGA

  • 2013年05月14日 21:05
  • 126KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:学点C# 4 继承 & 事件
举报原因:
原因补充:

(最多只允许输入30个字)