深入剖析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");
}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章