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?
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
.
Rendre la classe publique.
class NewClass
{
}
Est le même que:
internal class NewClass
{
}
Donc la classe doit être publique
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.
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.
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?
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.
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.
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.
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
Essayez de rendre votre constructeur privé comme ceci:
private Foo newClass = new Foo();