Megosztás a következőn keresztül:


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