Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Error 1 Inconsistent accessibility: return type is less accessible than method

Tags:

When I'm building, VS show error. This is my 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; } 

This is my error:

Error 1 Inconsistent accessibility: return type 'Project_HGHTM9.Composite' is less accessible than method 'Project_HGHTM9.Form1.buildComposite(System.Windows.Forms.ComboBox, System.Windows.Forms.ComboBox)' c:\users\nguyen\documents\visual studio 2013\Projects\Project_HGHTM9\Project_HGHTM9\Form1.cs 172 26 Project_HGHTM9

like image 846
user3453838 Avatar asked Jun 04 '14 15:06

user3453838


2 Answers

Your Composite class is not public. You can't return a non-public type from a public method.

If you don't specify an accessibility for a non-nested class then internal is used by default. Add public to your Composite class definition:

public class Composite {     ... 

Alternatively, if buildComposite doesn't need to be public (meaning it's only used internally by the form), then you could make the method private or internal as well:

private Composite buildComposite(ComboBox subs, ComboBox bas) {     .... 
like image 112
D Stanley Avatar answered Sep 20 '22 09:09

D Stanley


you are trying to return an instance of class Composite from a public method, but Composite is not public therefore can't be returned as any calling code cannot know anything about the Composite class as it cannot see it.

Make your Composite class public.

public class Composite{...} 

or make your method which is returning your Composite have the same visibility as your class (probably private):

private Composite buildComposite(ComboBox subs, ComboBox bas) 

Which of these is appropriate will depend on whether you need to call the method (or use the class) from outside your current assembly.

By default a class is usually as 'hidden' as it can be, so private for classes. Read more about the default visibility here

like image 43
Sam Holder Avatar answered Sep 19 '22 09:09

Sam Holder