| 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();// 错误: 类型B与A字段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] |