动易网校
| 网站首页 | 系部管理 | 技术文章 | 资料下载 | 人才与社会 | 雁过留声 | 学院论坛 |
程序语言 数据库 电脑艺术 网络技术 软件应用 考试认证
[图文]深入剖析C#继承机制
深入剖析C#继承机制         ★★★
【字体:- +
作者: 佚名 文章来源:本站原创 点击数: 更新时间:2005-10-29

using System ;
public enum sex
{ woman, man, } ;
abstract public class People
{
private string s_name;
public virtual string Name
{
get
{ return s_name ; }
}
private sex m_sex ;
public virtual sex Sex
{
get
{ return m_sex ; }
protected string s_card;
public abstract string Card
{ get; set; }
}

  上面的例子中声明了""这个类,人的姓名Name 和性别Sex 是两个只读的虚属性:身份证号Card 是一个抽象属性,允许读写,因为类People 中包含了抽象属性Card,所以People 必须声明是抽象的。下面我们为住宿的客人编写一个类类从People 中继承。再看下面的程序:

class Customer: People
{
string s_no ;
int i_day ;
public string No
{
get
{ return s_no ; }
set
{
if (s_no != value)
s_no = value;
}
}
public int Day
{
get
{ return i_day ; }
set
{
if (i_day != value)
i_day = value;
}
}
public override string Name
{
get { return base.Name; }
}
public override sex Sex
{
get { return base.Sex }
}
public override string Card
{
get
{ return s_ card ; }
set
{ s_ card = value ; }
}
}

  在类Customer 中,属性Name Sex Card 的声明都加上了override 修饰符,属性的声明都与基类People 中保持一致。Name Sex get 访问器,Card get set访问器都使用了base 关键字来访问基类People 中的访问器属性。Card 的声明重载了基类People 中的抽象访问器。这样,在Customer 类中没有抽象成员的存在,Customer可以是非虚的。

   3、继承中对使用可访问性级别的限制

   声明类型时,最重要的是查看该类型是否必须"至少"与其他成员或类型"具有同样的可访问性"。例如,直接基类必须至少与派生类具有同样的可访问性。以下声明将导致编译器错误,因为基类 BaseClass 的可访问性小于 MyClass
class BaseClass {...}
public class MyClass: BaseClass {...} // Error

  下表汇总了对使用声明的可访问性级别的限制。

上下文 备注 类 类类型的直接基类必须至少与类类型本身具有同样的可访问性。接口 接口类型的显式基接口必须至少与接口类型本身具有同样的可访问性。 委托 委托类型的返回类型和参数类型必须至少与委托类型本身具有同样的可访问性。 常数 常数的类型必须至少与常数本身具有同样的可访问性。字段 字段的类型必须与至少字段本身具有同样的可访问性。 方法 方法的返回类型和参数类型必须至少与方法本身具有同样的可访问性。 属性 属性的类型必须至少与属性本身具有同样的可访问性。事件 事件的类型必须至少与事件本身具有同样的可访问性。 索引器 索引器的类型和参数类型必须至少与索引器本身具有同样的可访问性。 运算符 运算符的返回类型和参数类型必须至少与运算符本身具有同样的可访问性。构造函数 构造函数的参数类型必须至少与构造函数本身具有同样的可访问性。

  示例:以下示例包含不同类型的错误声明。每个声明后的注释指示了预期的编译器错误。

using System ;
delegate int MyDelegate( ) ;
class B
{ //
定义一个私有的函数:
static int MyPrivateMethod()
{ return 0 ; }
}
public class A
{ //
字段定义:
public B myField = new B();//
错误: 类型BA字段A.myField级别不同
//
构造函数:
public readonly B myConst = new B(); //
错误: 类型B是仅读的
//
方法:
public B MyMethod()
{
return new B();
}
//
属性:
public B MyProp
{
set { }
}
public static B operator + (A m1, B m2)
{
return new B();
}
static void Main()
{
Console.Write("Compiled successfully");
}
}

上一页  [1] [2] [3] [4] 


::发表评论::
 姓 名:
 评 分: 1分 2分 3分 4分 5分
 评论内容:
请您发表评论

关于深入剖析C#继承机制的最新评论:

  • 上一篇文章: C# 编码规范和编程好习惯

  • 下一篇文章: .NET Framework 2.0 新特性
  • Copyright(C)2005 版权所有:重庆信息技术职业学院--软件工程学院
    Template design to 久久设计 for 1024x768 to MS-IE6 Site powered by powereasy