Accessibilité incohérente: le type de paramètre est moins accessible que la méthode

J'essaie de passer un objet (une référence à l'utilisateur actuellement connecté, essentiellement) entre deux formulaires. En ce moment, j'ai quelque chose dans ce sens dans le formulaire de connexion:

private ACTInterface oActInterface;

public void button1_Click(object sender, EventArgs e)
    {
        oActInterface = new ACTInterface(@"\actserverDatabasePremier.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...

Sur le formulaire suivant (clients), j'ai:

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

    public clients(ACTInterface _oActInt)

...ce qui me conduit à obtenir:

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

Je ne comprends pas vraiment quel est le problème - les deux champs sont privés et accessibles par la méthode publique pertinente à partir du formulaire. Googler n'aide pas vraiment, car il pointe juste vers un l'élément public et l'autre privé, ce qui n'est pas le cas ici.

Quelqu'un aide?

163
demandé sur Gert Sønderby 2011-06-03 19:53:07

10 réponses

Constructeur de public classe clients est public, mais il a un paramètre de type ACTInterface est private (c'est imbriquée dans une classe?). Vous ne pouvez pas le faire. Vous devez rendre ACTInterface au moins aussi accessible que clients.

252
répondu jason 2011-06-03 15:55:29

Rendre la classe publique.

class NewClass
{

}

Est le même que:

internal class NewClass
{

}

Donc la classe doit être publique

45
répondu Nisha 2017-12-11 17:08:07

Si le type ACTInterface n'est pas public, mais utilise l'accessibilité par défaut de internal (s'il est de niveau supérieur) ou private (s'il est imbriqué dans un autre type).

Donner au type le modificateur public Le corrigerait.

Une autre approche consiste à faire à la fois le type et la méthode internal, si c'est votre intention.

Le problème n'est pas l'accessibilité du champ (oActInterface), mais plutôt du type ACTInterface lui-même.

22
répondu Marc Gravell 2011-06-03 15:56:09

Quelle est l'accessibilité du type support.ACTInterface. L'erreur suggère qu'il n'est pas public.

Vous ne pouvez pas exposer une signature de méthode publique lorsque certains types de paramètres de la signature ne sont pas publics. Il ne serait pas possible d'appeler la méthode de l'extérieur car l'appelant ne pouvait pas construire les paramètres requis.

Si vous rendez support.ACTInterface public, cela supprimera cette erreur. Vous pouvez également réduire l'accessibilité de la méthode de formulaire si possible.

8
répondu James Gaunt 2011-06-03 15:55:37

Le problème ne semble pas être avec la variable mais plutôt avec la déclaration D'ACTInterface. ACTInterface est-il déclaré comme interne par hasard?

4
répondu Craig W. 2011-06-03 15:57:59

Quand j'ai reçu cette erreur, j'avais une classe " helper "que je n'ai pas déclarée comme publique qui a causé ce problème dans la classe qui utilisait la classe" helper". Rendre publique la classe" helper " a résolu cette erreur, comme dans:

Public ServiceClass { public ServiceClass (helperclass _helper) { } }

Public Classe HelperClass {} / / notez la classe D'Assistance publique qui a résolu mon problème.

Cela peut aider quelqu'un d'autre qui rencontre ce.

1
répondu Keenan Stewart 2018-04-04 12:00:36

Si cette erreur se produit lorsque vous souhaitez utiliser un classvariable dans un nouveau formulaire, vous devez mettre la définition de classe dans le

Nomformulaire.Designer.cs

Au lieu du nom du formulaire.cs fichier.

0
répondu ltsstar 2013-06-28 13:14:58

Après avoir mis à jour mon modèle entity framework, j'ai trouvé cette erreur infectant plusieurs fichiers dans ma solution. J'ai simplement fait un clic droit sur mon .fichier edmx et mon fichier TT et cliquez sur "Exécuter L'outil personnalisé" et cela m'a eu à nouveau après un redémarrage de Visual Studio 2012.

0
répondu Simon Kiely 2013-07-25 14:16:57

Ce que jamais u fournir la classe ActInterface est sous la classe privée c'est ainsi qu'il obtient l'erreur

Changez ce type de classe en public ActInterface il résoudra

0
répondu BalaRam 2016-06-07 12:26:43

Essayez de rendre votre constructeur privé comme ceci:

private Foo newClass = new Foo();
-2
répondu Yousri Mousa 2017-12-16 00:56:12