深入剖析C#继承机制7

继承

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");
}
}

时间: 2024-08-03 04:42:58

深入剖析C#继承机制7的相关文章

深入剖析C#继承机制(1)

继承 内容导航 一.继承基础知识 二.C#的继承规则 三. 访问与隐藏基类成员 四.多级继承 五.继承与访问修饰符 一. 继承基础知识 为了提高软件模块的可复用性和可扩充性,以便提高软件的开发效率,我们总是希望能够利用前人或自己以前的开发成果,同时又希望在自己的开发过程中能够有足够的灵活性,不拘泥于复用的模块.C#这种完全面向对象的程序设计语言提供了两个重要的特性--继承性inheritance 和多态性polymorphism. 继承是面向对象程序设计的主要特征之一,它可以让您重用代码,可以节

深入剖析C#继承机制(2)

继承 四.多级继承 一些面向对象语言允许一个类从多个基类中继承,而另一些面向对象语言只允许从一个类继承,但可以随意从几个接口或纯抽象类中继承. 只有C++支持多级继承,许多程序员对此褒贬不一.多级继承常会引起继承来的类之间的混乱,继承而来的方法往往没有唯一性,所以C#中类的继承只可以是一个,即子类只能派生于一个父类,而有时你必须继承多个类的特性,为了实现多重继承必须使用接口技术,下面是对接口的多重继承进行介绍: using System ;//定义一个描述点的接口interface IPoint

深入剖析C#继承机制6

继承 五.继承与访问修饰符 访问修饰符是一些关键字,用于指定声明的成员或类型的可访问性.类的继承中有四个访问修饰符: public protected internal private.使用这些访问修饰符可指定下列五个可访问性级别: public protected internal internal protected private. 声明的可访问性 意义 public 访问不受限制. protected 访问仅限于包含类或从包含类派生的类型. internal 访问仅限于当前项目. pro

深入剖析C#继承机制1

继承 一. 继承基础知识 为了提高软件模块的可复用性和可扩充性,以便提高软件的开发效率,我们总是希望能够利用前人或自己以前的开发成果,同时又希望在自己的开发过程中能够有足够的灵活性,不拘泥于复用的模块.C#这种完全面向对象的程序设计语言提供了两个重要的特性--继承性inheritance 和多态性polymorphism. 继承是面向对象程序设计的主要特征之一,它可以让您重用代码,可以节省程序设计的时间.继承就是在类之间建立一种相交关系,使得新定义的派生类的实例可以继承已有的基类的特征和能力,而

深入剖析C#继承机制2

继承 二.C#中的继承符合下列规则: 1.继承是可传递的.如果C从B中派生,B又从A中派生,那么C不仅继承了B中声明的成员,同样也继承了A中的成员.Object 类作为所有类的基类. 2.派生类应当是对基类的扩展.派生类可以添加新的成员,但不能除去已经继承的成员的定义. 3.构造函数和析构函数不能被继承.除此以外的其它成员,不论对它们定义了怎样的访问方式,都能被继承.基类中成员的访问方式只能决定派生类能否访问它们. 4.派生类如果定义了与继承而来的成员同名的新成员,就可以覆盖已继承的成员.但这并

深入剖析C#继承机制3

继承 三. 访问与隐藏基类成员 (1) 访问基类成员 通过base 关键字访问基类的成员: 调用基类上已被其他方法重写的方法. 指定创建派生类实例时应调用的基类构造函数. 基类访问只能在构造函数.实例方法或实例属性访问器中进行. 从静态方法中使用 base 关键字是错误的. 示例:下面程序中基类 Person 和派生类 Employee 都有一个名为 Getinfo 的方法.通过使用 base 关键字,可以从派生类中调用基类上的 Getinfo 方法. using System ;public

深入剖析C#继承机制5

继承 四.多级继承 一些面向对象语言允许一个类从多个基类中继承,而另一些面向对象语言只允许从一个类继承,但可以随意从几个接口或纯抽象类中继承. 只有C++支持多级继承,许多程序员对此褒贬不一.多级继承常会引起继承来的类之间的混乱,继承而来的方法往往没有唯一性,所以C#中类的继承只可以是一个,即子类只能派生于一个父类,而有时你必须继承多个类的特性,为了实现多重继承必须使用接口技术,下面是对接口的多重继承进行介绍: using System ;//定义一个描述点的接口interface IPoint

深入剖析C#继承机制4

继承 2) 隐藏基类成员 想想看,如果所有的类都可以被继承,继承的滥用会带来什么后果?类的层次结构体系将变得十分庞,大类之间的关系杂乱无章,对类的理解和使用都会变得十分困难.有时候,我们并不希望自己编写的类被继承.另一些时候,有的类已经没有再被继承的必要.C#提出了一个密封类(sealed class)的概念,帮助开发人员来解决这一问题. 密封类在声明中使用sealed 修饰符,这样就可以防止该类被其它类继承.如果试图将一个密封类作为其它类的基类,C#将提示出错.理所当然,密封类不能同时又是抽象

JavaScript学习:基础继承机制

javascript|继承 最近因为学校做网站设计,所以一直在ASP上和数据库上大费苦心. 我在前一个阶段是做Java程序设计的.突然接到任务并学习ASP,所以我一直都热忠并善于利用javascript来构架ASP程序. javascript的一个明显的优点就在于它可以定义和持有自己的对象.这一点好象是VBScript所无法比拟的. 有了这一点,可以利用javascript进行更接近于面向对象的程序设计.也许这将使网站开发更有乐趣... 但有个严重的缺点!javascript不支持继承机制.不象