2012-03-15 24 views
14

Estoy intentando pasar una lista de una clase de formulario a otra. Aquí está el código:El parámetro es menos accesible que el método

List<Branch> myArgus = new List<Branch>(); 

private void btnLogin_Click(object sender, EventArgs e) 
{ 
    // Get the selected branch name 
    string selectedBranch = lbBranches.SelectedItem.ToString(); 
    for (int i = 0; i < myArgus.Count; i++) 
    { 
     if (myArgus[i]._branchName == selectedBranch) 
     { 
      // Open the BranchOverview form 
      BranchOverview branchOverview = new BranchOverview(myArgus[i]); 
      branchOverview.Show(); 
     } 
     else 
     { 
      // Branch doesn't exist for some reason 
     } 
    } 
} 

Y luego, en mi clase BranchOverview:

List<Branch> branch = new List<Branch>(); 

public BranchOverview(List<Branch> myArgus) 
{ 
    InitializeComponent(); 

    branch = myArgus; 
} 

Cuando ejecuto el código, me sale este error:

Inconsistent accessibility: parameter type 'System.Collections.Generic.List<Argus.Branch>' is less accessible than method 'Argus.BranchOverview.BranchOverview(System.Collections.Generic.List<Argus.Branch>)' 
+0

Sí, está bien. Entonces, ¿cuál es específicamente tu pregunta? ¿No entiendes lo que significa el mensaje de error? ¿O lo entiendes pero no sabes cómo solucionarlo? ¿O entiendes cómo solucionarlo, pero estás atrapado decidiendo entre dos enfoques diferentes? –

+1

Posible duplicado de [Accesibilidad inconstante: el tipo de parámetro es menos accesible que el método] (http://stackoverflow.com/questions/6229504/inconsistent-accessibility-parameter-type-is-less-accessible-than-method) – user

Respuesta

40

tienes que declarar Branch a ser pública:

public class Branch { 
    . . . 
} 
+0

Ah, eso fue algo así, gracias. Dentro de la clase 'Branch' estaba creando otros objetos de clases que tampoco eran públicas, que es donde me estaba atrapando. ¡Aclamaciones! –

+0

Muchas gracias, aprendí OOP antes, pero todavía me olvido de esto. – duykhoa

+0

@duykhoa: eres bienvenido – MiMo

1

Por defecto, los campos de una clase son private si no está presente access modifier ...

8

como mensaje de error m ays, el tipo de todos los parámetros de un método debe ser al menos tan accesible como el método en sí.

Tienes que hacer que tu clase Branch sea pública si la estás usando como parámetro en un método público.

public class Branch { .... } 
^^^^^^ 

Alternativamente, usted podría cambiar su método sea internal en lugar de public.

internal BranchOverview(List<Branch> myArgus) 
^^^^^^^^ 
+0

Gracias, No sabía sobre "interno". Me ahorró mucho tiempo y modifiqué las clases de composición en público (cambio de una a pública, se produjeron más errores). Para cualquier persona interesada, hay más información disponible en http://msdn.microsoft.com/en-us/ library/7c5ka91b (v = VS.80) .aspx. – joshhendo

1

El constructor de BranchOverview es public, lo que significa que todos los tipos implicados en su lista de parámetros formales también deben ser public. Lo más probable es que no haya proporcionado una especificación de accesibilidad para Branch, es decir, que haya escrito

class Branch { ... } 

lo que significa que es Branchinternal.

0

Cambio:

List<Branch> myArgus = new List<Branch>(); 

sea público.

Cuestiones relacionadas