255 votes

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

Je suis en train d'essayer de passer un objet (une référence à l'utilisateur actuellement connecté, en gros) entre deux formulaires. Pour le moment, j'ai quelque chose comme ça dans le formulaire de connexion :

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())
        {
            //l'utilisateur est authentifié contre ACT, donc on peut continuer
            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 donne :

Erreur   1   Accessibilité incohérente : 
le type de paramètre 'support.ACTInterface' est moins accessible que la méthode   
'support.clients.clients(support.ACTInterface)'  
c:\work\net\backup\support\support\clients.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 correspondante du formulaire. Googling ne m'aide pas vraiment, car il pointe simplement vers un élément étant public et l'autre privé, ce qui n'est pas le cas ici.

Quelqu'un peut-il m'aider ?

394voto

Jason Points 125291

Le constructeur de la classe public clients est public mais il a un paramètre de type ACTInterface qui est private (il est imbriqué dans une classe ?). Vous ne pouvez pas faire ça. Vous devez rendre ACTInterface au moins aussi accessible que clients.

2 votes

Pour plus d'informations, consultez l'article MSDN sur l'erreur CS0051

7 votes

Cela m'a aidé. Je cherchais à faire ce qui suit : JsonConvert.DeserializeObject>(respon‌​se.Content.ReadAsStr‌​ingAsync().Result); La classe "Name_Of_My_Model" n'était pas définie comme Public ni comme Private. Il s'est avéré que je DEVAIS définir la classe "Name_Of_My_Model" comme public pour être utilisée dans une méthode "public" dotée d'un décorateur WebMethod au-dessus d'elle pour un appel ajax que je faisais.

1 votes

92voto

judith nisha Points 372

Rendre la classe publique.

class NewClass
{

}

est la même que:

internal class NewClass
{

}

donc la classe doit être publique

1 votes

Quelqu'un pourrait-il expliquer, s'il vous plaît?

1 votes

Par défaut (en laissant de côté le mot-clé d'accessibilité), une classe est interne et n'est pas publiquement accessible. Il est préférable de déclarer explicitement l'accessibilité de la classe pour montrer l'intention.

29voto

Marc Gravell Points 482669

Il semble que 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 résoudrait le problème.

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

Le problème ne réside pas dans l'accessibilité du champ (oActInterface), mais plutôt dans celle du type ACTInterface lui-même.

9voto

James Gaunt Points 9541

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 où certains types de paramètres de la signature ne sont pas publics. Il ne serait pas possible d'appeler la méthode depuis l'extérieur car l'appelant ne pourrait pas construire les paramètres requis.

Si vous rendez support.ACTInterface public, cela supprimera cette erreur. Sinon, réduisez si possible l'accessibilité de la méthode de forme.

4voto

Craig W. Points 3225

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X