C#之可访问性约束(可访问性不一致)

C# 语言中的有些构造要求某个类型至少与某个成员或其他类型具有同样的可访问性 (at least as accessible as)。如果 T 的可访问域是 M 可访问域的超集,我们就说类型 T 至少与成员或类型 M 具有同样的可访问性。换言之,如果 T 在可访问 M 的所有上下文中都是可访问的,则 T 至少与 M 具有同样的可访问性。

存在下列可访问性约束:

· 类类型的直接基类必须至少与类类型本身具有同样的可访问性。

· 接口类型的显式基接口必须至少与接口类型本身具有同样的可访问性。

· 委托类型的返回类型和参数类型必须至少与委托类型本身具有同样的可访问性。

· 常量的类型必须至少与常量本身具有同样的可访问性。

· 字段的类型必须至少与字段本身具有同样的可访问性。

· 方法的返回类型和参数类型必须至少与方法本身具有同样的可访问性。

· 属性的类型必须至少与属性本身具有同样的可访问性。

· 事件的类型必须至少与事件本身具有同样的可访问性。

· 索引器的类型和参数类型必须至少与索引器本身具有同样的可访问性。

· 运算符的返回类型和参数类型必须至少与运算符本身具有同样的可访问性。

· 实例构造函数的参数类型必须至少与实例构造函数本身具有同样的可访问性。

在下面的示例中

class A {...}

public class B: A {...}

B 类导致编译时错误,因为 A 并不具有至少与 B 相同的可访问性。

例如:

using System;
using System.Collections.Generic;

namespace LearningCSharp
{
    class MyClass
    {
        int a;
    }
    public class Test
    {
        public List<MyClass> mcList;
        public MyClass[] mc;
    }

    public class MyDerived : MyClass
    {

    }

    class Program
    {
        public static void Main()
        {

        }
    }
}

image-20210902000220980

posted @ 2021-09-02 00:03  JohnYang819  阅读(525)  评论(0编辑  收藏  举报