J'essaie de passer un objet (une référence à l'utilisateur actuellement connecté) entre deux formulaires. Pour le moment, j'ai quelque chose de similaire 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())
{
//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 fait que je reçois:
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
Je ne comprends pas vraiment quel est le problème - les deux champs sont privés et accessibles via la méthode publique appropriée à partir du formulaire. Googler n'aide pas vraiment, car il indique simplement qu'un élément est public et l'autre privé, ce qui n'est pas le cas ici.
Quelqu'un aide?
Le constructeur de public
class clients
est public
mais le paramètre ACTInterface
est de type private
(il est imbriqué dans une classe?). Tu ne peux pas faire ça. 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 son du type ACTInterface
n'est pas public
, il utilise l'accessibilité par défaut de internal
(s'il s'agit du 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 à définir à la fois le type et la méthode internal
, si tel 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 que ce n'est pas public.
Vous ne pouvez pas exposer une signature de méthode publique lorsque certains des types de paramètre 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, cette erreur sera supprimée. Vous pouvez également réduire l’accessibilité de la méthode du formulaire si possible.
Le problème ne semble pas être lié à la variable mais plutôt à la déclaration de ACTInterface. ACTInterface est-il déclaré comme interne par hasard?
Lorsque j'ai reçu cette erreur, j'ai eu une classe "helper" que je n'ai pas déclarée publique et qui est à l'origine de 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 class HelperClass {} // Notez le HelperClass public qui a résolu mon problème.
Cela peut aider quelqu'un d'autre qui rencontre cela.
Vous pouvez obtenir Parameter (classe ayant moins d'accessibilité) sous la forme object
, puis le convertir en classe par le mot clé as
.
Si cette erreur se produit lorsque vous souhaitez utiliser une variable de classe dans un nouveau formulaire, vous devez placer la définition de la classe dans
Formname.Designer.cs
au lieu du fichier Formname.cs.
Après la mise à jour de mon modèle de structure d'entité, j'ai trouvé cette erreur infectant plusieurs fichiers de ma solution. J'ai simplement cliqué avec le bouton droit de la souris sur mon fichier .edmx et mon fichier TT, puis sur "Exécuter l'outil personnalisé", ce qui m'a redonné raison après le redémarrage de Visual Studio 2012.