Ograniczenia dotyczące korzystania z ułatwień dostępu, poziomy (C# odniesienia)
Po określeniu typu w deklaracji, należy sprawdzić, czy poziom dostępności tego typu jest zależna od poziomu dostępności członka lub innego typu.Na przykład bezpośrednia klasa podstawowa musi być co najmniej dostępne w klasie pochodnej.Następujące deklaracje spowodować błąd kompilatora, ponieważ klasa podstawowa BaseClass jest mniej dostępny niż MyClass:
class BaseClass {...}
public class MyClass: BaseClass {...} // Error
W następującej tabeli podsumowano ograniczenia na poziomy deklarowanych ułatwień dostępu.
Kontekst |
Uwagi |
---|---|
Bezpośrednia klasa podstawowa typu klasy musi być co najmniej dostępne jako typ klasy. |
|
Jawne interfejsach podstawowych typu interfejsu musi być co najmniej dostępne jako typ interfejsu. |
|
Zwracany typ i typy parametrów typu obiektu delegowanego musi być co najmniej dostępne jako typ obiektu delegowanego. |
|
Typ stała musi być co najmniej dostępne jako stała, sam. |
|
Typ pola musi być co najmniej dostępne jako samo pole. |
|
Zwracany typ i typy parametrów metody musi być co najmniej dostępne jako samą metodę. |
|
Typ właściwości musi być co najmniej dostępne jako właściwości, sobie. |
|
Typ zdarzenia musi być co najmniej dostępne jako zdarzenie, sama. |
|
Typ i parametr rodzaje indeksatora musi być co najmniej dostępne jako sam indeksatora. |
|
Zwracany typ i typy parametrów operatora musi być co najmniej dostępne jako samego operatora. |
|
Typy parametrów konstruktora musi być co najmniej dostępne jako sam konstruktora. |
Przykład
Poniższy przykład zawiera błędne deklaracje różnych typów.Komentarz występujący po każdej deklaracji wskazuje błąd kompilatora oczekiwane.
// 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");
}
}
Specyfikacja języka C#
Aby uzyskać więcej informacji, zobacz Specyfikacja języka C#. Specyfikacja języka to najlepsze źródło informacji dotyczących składni i zastosowania języka C#.
Zobacz też
Informacje
Modyfikatory dostępu (C# odniesienia)
Dostępność domeny (C# odniesienia)
Poziomy dostępności (C# odniesienia)
Modyfikatory dostępu (Podręcznik programowania C#)