Omezení používání úrovní přístupnosti (Referenční dokumentace jazyka C#)

Při zadávání typu v deklaraci zkontrolujte, zda úroveň přístupnosti typu závisí na úrovni přístupnosti člena nebo jiného typu. Například přímá základní třída musí být alespoň tak přístupná jako odvozená třída. Následující deklarace způsobují chybu kompilátoru, protože základní třída BaseClass je méně přístupná než MyClass:

class BaseClass {...}
public class MyClass: BaseClass {...} // Error

Následující tabulka shrnuje omezení deklarovaných úrovní přístupnosti.

Kontext Poznámky
Třídy Přímá základní třída typu třídy musí být alespoň tak přístupná jako samotný typ třídy.
Rozhraní Explicitní základní rozhraní typu rozhraní musí být alespoň tak přístupná jako samotný typ rozhraní.
Delegáti Návratový typ a typy parametrů typu delegáta musí být alespoň tak přístupné jako samotný typ delegáta.
Konstanty Typ konstanty musí být alespoň tak přístupný jako samotná konstanta.
Pole Typ pole musí být alespoň tak přístupný jako samotné pole.
Metody Návratový typ a typy parametrů metody musí být alespoň tak přístupné jako samotná metoda.
Vlastnosti Typ vlastnosti musí být alespoň tak přístupný jako samotná vlastnost.
Události Typ události musí být alespoň tak přístupný jako samotná událost.
Indexery Typ a typy parametrů indexeru musí být alespoň tak přístupné jako samotný indexer.
Operátory Návratový typ a typy parametrů operátoru musí být alespoň tak přístupné jako samotný operátor.
Konstruktory Typy parametrů konstruktoru musí být alespoň tak přístupné jako samotný konstruktor.

Příklad

Následující příklad obsahuje chybné deklarace různých typů. Komentář následující po každé deklaraci označuje očekávanou chybu kompilátoru.

// Restrictions on Using Accessibility Levels
// CS0052 expected as well as CS0053, CS0056, and CS0057
// To make the program work, change access level of both class B
// and MyPrivateMethod() to public.

using System;

// A delegate:
delegate int MyDelegate();

class B
{
    // A private method:
    static int MyPrivateMethod()
    {
        return 0;
    }
}

public class A
{
    // Error: The type B is less accessible than the field A.myField.
    public B myField = new B();

    // Error: The type B is less accessible
    // than the constant A.myConst.
    public readonly B myConst = new B();

    public B MyMethod()
    {
        // Error: The type B is less accessible
        // than the method A.MyMethod.
        return new B();
    }

    // Error: The type B is less accessible than the property A.MyProp
    public B MyProp
    {
        set
        {
        }
    }

    MyDelegate d = new MyDelegate(B.MyPrivateMethod);
    // Even when B is declared public, you still get the error:
    // "The parameter B.MyPrivateMethod is not accessible due to
    // protection level."

    public static B operator +(A m1, B m2)
    {
        // Error: The type B is less accessible
        // than the operator A.operator +(A,B)
        return new B();
    }

    static void Main()
    {
        Console.Write("Compiled successfully");
    }
}

specifikace jazyka C#

Další informace najdete v tématu Specifikace jazyka C#. Specifikace jazyka je úplným a rozhodujícím zdrojem pro syntaxi a použití jazyka C#.

Viz také