Compilerfout CS0051

Inconsistente toegankelijkheid: het parametertype 'type' is minder toegankelijk dan de methode 'method'.

Deze fout treedt op wanneer u een methode declareert (inclusief constructors) met een parametertype dat minder toegankelijk is dan de methode zelf. U hebt bijvoorbeeld een openbare constructor die gebruikmaakt van een interne of persoonlijke klasse als parametertype.

Het meest voorkomende scenario is wanneer u een openbare methode definieert, maar een van de parametertypen intern of privé is. Hiermee wordt een inconsistentie gemaakt omdat externe code de methode kan zien, maar geen toegang heeft tot de typen die nodig zijn om deze aan te roepen.

Deze fout oplossen

  1. Identificeer het parametertype dat het probleem veroorzaakt: bekijk het foutbericht om te zien welk parametertype minder toegankelijk is.
  2. Controleer de toegankelijkheid van het parametertype: klik met de rechtermuisknop op het parametertype in uw IDE en selecteer 'Ga naar definitie' (of druk op F12) om te zien hoe deze wordt gedeclareerd.
  3. Toegankelijkheidsniveaus vergelijken: zorg ervoor dat het parametertype ten minste zo toegankelijk is als de methode die deze gebruikt.

Voorbeelden

Voorbeeld 1: Openbare methode met het type privéparameter

In het volgende voorbeeld wordt CS0051 gegenereerd omdat de methode F openbaar is, maar het parametertype B privé is:

// CS0051.cs
public class A
{
    // B is implicitly private here.
    class B
    {
    }

    public static void F(B b)  // CS0051
    {
    }

    public static void Main()
    {
    }
}

Voorbeeld 2: Openbare constructor met intern parametertype

Dit is een veelvoorkomend scenario waarin u een openbare constructor hebt, maar het parametertype intern is:

// 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.
    }
}

Deze fout corrigeren

Kies een van de volgende methoden:

  1. Het parametertype toegankelijker maken: wijzig het parametertype zodat deze overeenkomt met of groter is dan de toegankelijkheid van de methode:

    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
        {
        }
    }
    
  2. Verminder de toegankelijkheid van de methode: maak de methode minder toegankelijk zodat deze overeenkomt met het parametertype:

    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
        {
        }
    }
    
  3. Gebruik een meer toegankelijke interface of basisklasse: Gebruik in plaats van rechtstreeks het minder toegankelijke type een openbare interface of basisklasse te gebruiken:

    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.
        }
    }
    

Zie ook