找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 488|回复: 1

新人来说.net-简单的继承

[复制链接]
发表于 2013-11-27 15:22 | 显示全部楼层 |阅读模式
  最简单的继承就是一个类型定义了一个方法,它的子类又重新定义了该方法。见下面的例子:( T) N8 K8 Q5 \+ A# y
4 {- D! S: r8 ^# ?/ X7 k, g
  class BaseClass {
& W  R- |% i2 O4 U/ \% J1 _8 f  public void SimpleMethod() {; d6 W* n$ ?  s0 ?! Z. ?
  DebugMgr.start( 10, "BaseClass.SimpleMethod");0 K( {/ v+ {, T
  DebugMgr.end( 10);
7 v7 a7 v8 P! k% o, |+ G  class Subclassed : BaseClass {
6 }) b0 @: H' v: Q% V& y( V8 O% T  public new void SimpleMethod() {
+ t: v/ G1 d( Z7 \9 X" h: G5 K  DebugMgr.start( 10, "Subclassed.SimpleMethod"); DebugMgr.end( 10);$ F: t  I: n0 m% }; s' D0 j* ?, l( l
; Y- z6 U8 Q4 U: P7 X. R$ n
  BaseClass类定义了S彳mpleMethod方法,Subclassed类是BaseClass类的子类,它重新定义了SimpleMethod方法。注意关键字new的使用,正是关键字new使C#和其他.NET语言成为具有一致继承管理能力的软件开发语言。- d; y4 r$ U! j: b
6 l4 e' I- L, k; s/ ~" c9 v
  当一个类继承自另一个类,并定义了一个和父类中相同的方法后,这个类就覆盖(over-ride) 了这个方法。覆盖意味着用一个新的功能来代替旧的功能。新功能的代码可能会引入新的问题。要避免这样的问题,C#和.NET要求开发人员在覆盖一个方法时给出明确的说明。以此提醒开发人员该功能在基类中有不同的实现。1 N2 ~6 @( c. [0 o4 l

  P2 ]; `3 O! N/ M3 g, p  下面的代码说明如何使用定义的类型:& F: p+ m7 f  {

% A$ E% z" c; y: J$ Y, x0 j  Subclassed subcls = new Subclassed(); subcls.SimpleMethod();
- E2 y# Q- T+ P+ i  DebugMgr.output( 10, "Now assigning to type BaseClass");# ~( u8 U' c) b
  BaseClass basecls = subcls; basecls.SimpleMethod();& H2 B' o* b! E1 ]9 N% J/ M

& B% p" T* N) e! {  U7 T; B  Subclassed类型被实例化,并被赋值给同样声明为Subclassed类型的变量subcls。接下来,调用SecondMethod方法,然后将实例向上转型为父类BaseClass类型,并赋值给basecls变量,并再一次调用了 S1mpleMethod方法。下面是这个示例代码执行后产生的输出信息:3 |! w" ~5 C& m0 C% H' S  X8 L
1 w# b% e. c# V" |# ], T
  start (Subclassed.SimpleMethod) end (Subclassed.SimpleMethod) Now assigning to type BaseClass start (BaseClass.SimpleMethod) end (BaseClass.SimpleMethod)
) r. f2 k. Z0 h! ^7 F- G5 a0 J, J8 k3 q) C
  当使用了关键字new,使用者使用的功能要取决于类型和类型转换。假设实例化了BaseClass类型,如果该实例向下转型为Subclassed,则会调用Subclassed的方法,因为Subclassed拥有SecondMethod方法的实现。如果将实例的类型转换回BaseClass,由于BaseClass自己也实现SecondMethod方法,所以将会调用BaseClass的方法。这是个很清晰的继承模型,因为所执行的方法的实现都是基于类型的转换。
, V) c$ Z  L, c8 ]# p" E( B: N
 楼主| 发表于 2013-11-27 15:25 | 显示全部楼层
支持一下吧
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2025-12-21 23:10

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表