Inconsistent toegankelijkheid: parametertype is minder toegankelijk dan methode

Ik probeer een object door te geven (een verwijzing naar de momenteel ingelogde gebruiker, in principe) tussen twee vormen. Op dit moment heb ik iets in deze lijnen in het loginformulier:

private ACTInterface oActInterface;
public void button1_Click(object sender, EventArgs e)
    {
        oActInterface = new ACTInterface(@"\\actserver\Database\Premier.pad",this.textUser.Text,this.textPass.Text);
        if (oActInterface.checkLoggedIn())
        {
            //user has authed against ACT, so we can carry on
            clients oClientForm = new clients(oActInterface);
            this.Hide();
            oClientForm.Show();
        }
        else...

Op het volgende formulier (clients), ik heb:

public partial class clients : Form
{
    private ACTInterface oActInt {get; set;}
    public clients(ACTInterface _oActInt)

… wat resulteert in mij:

Error   1   Inconsistent accessibility: 
parameter type 'support.ACTInterface' is less accessible than method    
'support.clients.clients(support.ACTInterface)'  
c:\work\net\backup\support\support\clients.cs   20  16  support

Ik begrijp niet echt wat het probleem is – beide velden zijn privé, en geopend door de relevante openbare methode vanuit het formulier. Googling helpt niet echt, omdat het gewoon wijst op één element dat openbaar is en de andere privé, wat hier niet het geval is.

Iedereen helpen?


Antwoord 1, Autoriteit 100%

Constructor van publicclass clientsis publicmaar het heeft een parameter van het type ACTInterfacedie private(het is genest in een klasse?). Dat kan je niet. U moet ACTInterfaceminstens zo toegankelijk maken als clients.


Antwoord 2, autoriteit 23%

Maak de les openbaar.

class NewClass
{
}

is hetzelfde als:

internal class NewClass
{
}

dus de klas moet openbaar zijn


Antwoord 3, autoriteit 7%

If klinkt als het type ACTInterfaceis niet public, maar gebruikt de standaard toegankelijkheid van ofwel internal(als het op het hoogste niveau is) ) of private(als het in een ander type is genest).

Als je het type de modifier publicgeeft, wordt het opgelost.

Een andere benadering is om zowel het type als de methode internalte maken, als dat je bedoeling is.

Het probleem is niet de toegankelijkheid van het veld(oActInterface), maar eerder van het type ACTInterfacezelf.


Antwoord 4, autoriteit 2%

Wat is de toegankelijkheid van het type support.ACTInterface. De fout suggereert dat het niet openbaar is.

U kunt een handtekening van een openbare methode niet weergeven als sommige parametertypen van de handtekening niet openbaar zijn. Het zou niet mogelijk zijn om de methode van buitenaf aan te roepen omdat de aanroeper de vereiste parameters niet kon construeren.

Als u support.ACTInterfaceopenbaar maakt, wordt deze fout verwijderd. U kunt ook de toegankelijkheid van de formuliermethode verminderen, indien mogelijk.


Antwoord 5, autoriteit 2%

parameter type 'support.ACTInterface' is less accessible than method    
'support.clients.clients(support.ACTInterface)' 

De fout zegt dat ‘support.ACTInterface’ minder toegankelijk is omdat je de interface privé hebt gemaakt, in ieder geval intern hebt gemaakt of openbaar hebt gemaakt.


Antwoord 6

Het probleem lijkt niet bij de variabele te liggen, maar eerder bij de declaratie van ACTInterface. Is ACTInterface toevallig als intern gedeclareerd?


Antwoord 7

Toen ik deze fout ontving, had ik een “helper”-klasse die ik niet als openbaar heb gedeclareerd en die dit probleem veroorzaakte in de klasse die de “helper” -klasse gebruikte. Door de klasse “helper” openbaar te maken, werd deze fout opgelost, zoals in:

openbare dienstklasse
{
openbare ServiceClass(HelperClass _helper)
{ }
}

openbareclass HelperClass {} // Let op de openbare HelperClass die mijn probleem heeft opgelost.

Dit kan iemand anders helpen die dit tegenkomt.


Antwoord 8

Je kunt Parameter (klasse die minder toegankelijk is) krijgen als objecten deze vervolgens converteren naar je klasse met het trefwoord as.


Antwoord 9

Als deze fout optreedt wanneer u een klassevariabele in een nieuwe vorm wilt gebruiken, moet u de klassedefinitie in de

Formuliernaam.Designer.cs

in plaats van het bestand Formname.cs.


Antwoord 10

Na het updaten van mijn entiteitskadermodel, ontdekte ik dat deze fout verschillende bestanden in mijn oplossing infecteerde. Ik klikte gewoon met de rechtermuisknop op mijn .edmx-bestand en mijn TT-bestand en klikte op “Run Custom Tool” en dat had me weer goed na een herstart van Visual Studio 2012.


Antwoord 11

Alle antwoorden die zeggen dat het type ActInterfaceopenbaar is, hebben gelijk. Ik plaats dit bericht alleen om expliciet te vermelden waarom dat een probleem is

Als een parameter voor uw openbare klassenconstructor privateof internegekwalificeerde klasse is, betekent dit dat u geen object van die parameterklasse kunt maken van buiten de assembly en als u het parameterobject niet kunt instantiëren, hoe kunt u deze constructor dan aanroepen om een object van deze klasse te instantiëren?


Antwoord 12

Probeer je constructor als volgt privé te maken:

private Foo newClass = new Foo();

Other episodes