Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Niespójna dostępność: typ parametru "type" ma niższy poziom dostępności niż metoda "method".
Ten błąd występuje podczas deklarowania metody (w tym konstruktorów) z typem parametru, który jest mniej dostępny niż sama metoda. Na przykład może istnieć publiczny konstruktor, który używa klasy wewnętrznej lub prywatnej jako typu parametru.
Najbardziej typowym scenariuszem jest zdefiniowanie metody publicznej, ale jeden z jego typów parametrów jest wewnętrzny lub prywatny. Powoduje to niespójność, ponieważ kod zewnętrzny może zobaczyć metodę, ale nie może uzyskać dostępu do typów potrzebnych do jego wywołania.
Jak rozwiązać ten błąd
- Zidentyfikuj typ parametru powodujący problem: Sprawdź komunikat o błędzie, aby zobaczyć, który typ parametru jest mniej dostępny.
- Sprawdź dostępność typu parametru: kliknij prawym przyciskiem myszy typ parametru w środowisku IDE i wybierz pozycję "Przejdź do definicji" (lub naciśnij F12), aby zobaczyć, jak jest zadeklarowany.
- Porównaj poziomy ułatwień dostępu: upewnij się, że typ parametru jest co najmniej tak dostępny, jak metoda, która go używa.
Przykłady
Przykład 1: Metoda publiczna z typem parametru prywatnego
Poniższy przykład generuje CS0051, ponieważ metoda F jest publiczna, ale typ B parametru jest prywatny:
// CS0051.cs
public class A
{
// B is implicitly private here.
class B
{
}
public static void F(B b) // CS0051
{
}
public static void Main()
{
}
}
Przykład 2. Publiczny konstruktor z typem parametru wewnętrznego
Jest to typowy scenariusz, w którym masz publiczny konstruktor, ale typ parametru jest wewnętrzny:
// Another file or assembly.
internal class DatabaseConfiguration
{
public string ConnectionString { get; set; }
}
// In your main class.
public class DataService
{
// This causes CS0051 because the constructor is public.
// but DatabaseConfiguration is internal.
public DataService(DatabaseConfiguration config) // CS0051
{
// Implementation.
}
}
Aby naprawić ten błąd
Wybierz jedną z następujących metod:
Udostępnij typ parametru: Zmień typ parametru tak, aby był zgodny lub przekraczał dostępność metody:
public class A { // Make B public to match the accessibility of method F. public class B { } public static void F(B b) // Now works correctly { } }Zmniejsz dostępność metody: Zmniejsz dostępność metody , aby była mniej dostępna, aby była zgodna z typem parametru:
public class A { class B // B remains private. { } // Make F internal or private to match B's accessibility. internal static void F(B b) // Now works correctly { } }Użyj bardziej dostępnego interfejsu lub klasy bazowej: Zamiast bezpośrednio korzystać z mniej dostępnego typu, użyj interfejsu publicznego lub klasy bazowej:
public interface IConfiguration { string ConnectionString { get; } } internal class DatabaseConfiguration : IConfiguration { public string ConnectionString { get; set; } } public class DataService { // Use the public interface instead. public DataService(IConfiguration config) // Works correctly { // Implementation. } }
Zobacz także
- Modyfikatory dostępu
- poziomy ułatwień dostępu
- Konstruktory