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#.