web-dev-qa-db-fra.com

Erreur 1 Accessibilité incohérente: le type de retour est moins accessible que la méthode

Quand je construis, VS show error. Ceci est mon code:

public Composite buildComposite(ComboBox subs, ComboBox bas)
{
    int count = 0;
    Composite a = new Composite();
    if (subs.SelectedItem != null)
    {
        foreach (Substance d in listSubstance)
        {
            if (String.Compare(d.notation, subs.Text) == 0)
            {
                count++;
                a.subs = new Substance(d);
                break;
            }
        }
    }
    if (bas.SelectedItem != null)
    {
        foreach (Base g in listBase)
        {
            if (String.Compare(g.notation, bas.Text) == 0)
            {
                count++;
                a.bas = new Base(g);
                break;
            }
        }
    }
    if (count > 0)
    {
        a.equilibrium();
        a.settypesubs(arrayDefinition);
        return a;
    }
    else
        return null;
}

C'est mon erreur

Erreur 1 Accessibilité incohérente: le type de résultat 'Project_HGHTM9.Composite' est moins accessible que la méthode 'Project_HGHTM9.Form1.buildComposite (System.Windows.Forms.ComboBox, System.Windows.Forms.ComboBox)' c:\users\nguyen\visual studio 2013\Projects\Project_HGHTM9\Project_HGHTM9\Form1.cs 172 26 Projet_HGHTM9

8
user3453838

Votre classe Composite n'est pas public. Vous ne pouvez pas retourner un type non public à partir d'une méthode publique.

Si vous ne spécifiez pas d'accessibilité pour une classe non imbriquée, internal est utilisé par défaut. Ajoutez public à votre définition de classe Composite:

public class Composite
{
    ...

Sinon, si buildComposite n'a pas besoin que soit public (c'est-à-dire qu'il est uniquement utilisé en interne par le formulaire), vous pouvez également créer la méthode private:

private Composite buildComposite(ComboBox subs, ComboBox bas)
{
    ....
36
D Stanley

vous essayez de renvoyer une instance de la classe Composite à partir d'une méthode publique, mais Composite n'est pas public. Par conséquent, aucun code appelant ne peut rien connaître de la classe Composite puisqu'il ne peut pas le voir.

Rendez public votre classe Composite.

public class Composite{...}

ou donnez à votre méthode qui renvoie votre Composite la même visibilité que votre classe (probablement privée):

private Composite buildComposite(ComboBox subs, ComboBox bas)

Laquelle de celles-ci est appropriée dépend de si vous devez appeler la méthode (ou utiliser la classe) de l'extérieur de votre Assemblée actuelle.

Par défaut, une classe est généralement aussi "cachée" que possible, donc privée pour les classes. En savoir plus sur la visibilité par défaut ici

2
Sam Holder

si Composite a été défini dans un code inaccessible/non modifiable comme class Composite, vous pouvez essayer de transformer buildComposite en interne. Comme internal Composite buildComposite(ComboBox subs, ComboBox bas). De cette façon, il est encore plus accessible en rendant la méthode private .

0
KSK

Votre type personnalisé, Composite, est actuellement moins accessible que votre méthode buildComposite. Pour que les autres classes puissent voir cette méthode publique, elles doivent également avoir un accès public à la classe/structure Composite.

0
GEEF