Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Inkonsekvent hjälpmedel: parametertypen "type" är mindre tillgänglig än metoden "method"
Det här felet uppstår när du deklarerar en metod (inklusive konstruktorer) med en parametertyp som är mindre tillgänglig än själva metoden. Du kan till exempel ha en offentlig konstruktor som använder en intern eller privat klass som parametertyp.
Det vanligaste scenariot är när du definierar en offentlig metod, men en av dess parametertyper är intern eller privat. Detta skapar en inkonsekvens eftersom extern kod kan se metoden men inte kan komma åt de typer som behövs för att anropa den.
Så här felsöker du det här felet
- Identifiera den parametertyp som orsakar problemet: Titta på felmeddelandet för att se vilken parametertyp som är mindre tillgänglig.
- Kontrollera tillgängligheten för parametertypen: Högerklicka på parametertypen i din IDE och välj "Gå till definition" (eller tryck på F12) för att se hur den deklareras.
- Jämför hjälpmedelsnivåer: Kontrollera att parametertypen är minst lika tillgänglig som den metod som använder den.
Exempel
Exempel 1: Offentlig metod med privat parametertyp
Följande exempel genererar CS0051 eftersom metoden F är offentlig men parametertypen B är privat:
// CS0051.cs
public class A
{
// B is implicitly private here.
class B
{
}
public static void F(B b) // CS0051
{
}
public static void Main()
{
}
}
Exempel 2: Offentlig konstruktor med intern parametertyp
Det här är ett vanligt scenario där du har en offentlig konstruktor men parametertypen är intern:
// 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.
}
}
Så här åtgärdar du det här felet
Välj någon av följande metoder:
Gör parametertypen mer tillgänglig: Ändra parametertypen så att den matchar eller överskrider metodens tillgänglighet:
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 { } }Minska metodens tillgänglighet: Gör metoden mindre tillgänglig för att matcha parametertypen:
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 { } }Använd ett mer tillgängligt gränssnitt eller en basklass: Använd ett offentligt gränssnitt eller en basklass i stället för att använda den mindre tillgängliga typen direkt:
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. } }