Akadálymentességi szintek használatának korlátozásai (C# referencia)
Ha típust ad meg egy deklarációban, ellenőrizze, hogy a típus akadálymentességi szintje függ-e egy tag vagy egy másik típus akadálymentességi szintjétől. A közvetlen alaposztálynak például legalább olyan elérhetőnek kell lennie, mint a származtatott osztály. A következő deklarációk fordítóhibát okoznak, mert az alaposztály BaseClass
kevésbé érhető el, mint MyClass
:
class BaseClass {...}
public class MyClass: BaseClass {...} // Error
Az alábbi táblázat a deklarált akadálymentességi szintekre vonatkozó korlátozásokat foglalja össze.
Környezet | Megjegyzések |
---|---|
Osztályok | Az osztálytípus közvetlen alaposztályának legalább olyan akadálymentesnek kell lennie, mint maga az osztálytípus. |
Felületek | Az interfésztípus explicit alapillesztőinek legalább olyan hozzáférhetőnek kell lenniük, mint maga a felülettípus. |
Küldöttek | A delegált típusú visszatérési típusnak és paramétertípusoknak legalább olyan elérhetőnek kell lenniük, mint maga a delegált típus. |
Állandók | Az állandó típusának legalább olyan akadálymentesnek kell lennie, mint maga az állandó. |
Mezők | A mező típusának legalább olyan hozzáférhetőnek kell lennie, mint maga a mező. |
Módszerek | A metódus visszatérési típusának és paramétertípusának legalább olyan elérhetőnek kell lennie, mint maga a metódus. |
Tulajdonságok | A tulajdonság típusának legalább olyan akadálymentesnek kell lennie, mint maga a tulajdonság. |
Események | Az esemény típusának legalább olyan akadálymentesnek kell lennie, mint maga az esemény. |
Indexelők | Az indexelő típusának és paramétertípusának legalább olyan elérhetőnek kell lennie, mint maga az indexelő. |
Operátorok | Az operátor visszatérési típusának és paramétertípusának legalább olyan elérhetőnek kell lennie, mint maga az operátor. |
Konstruktorok | A konstruktor paramétertípusainak legalább olyan elérhetőnek kell lenniük, mint maga a konstruktor. |
Példa
Az alábbi példa különböző típusú hibás deklarációkat tartalmaz. Az egyes deklarációkat követő megjegyzés a várt fordítóhibát jelzi.
// 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");
}
}
C# nyelvspecifikáció
További információkért lásd a C# nyelvi specifikációját. A nyelvi specifikáció a C#-szintaxis és -használat végleges forrása.
Lásd még
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: