Accesibilidad incoherente: el tipo de parámetro es menos accesible que el método

Estoy tratando de pasar un objeto (básicamente, una referencia al usuario que ha iniciado sesión actualmente) entre dos formularios. Por el momento, tengo algo en este sentido en el formulario de inicio de sesión:

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... 

en el siguiente formulario (clientes), tengo:

 public partial class clients : Form { private ACTInterface oActInt {get; set;} public clients(ACTInterface _oActInt) 

… lo que me lleva a obtener:

 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 

Realmente no entiendo cuál es el problema: ambos campos son privados y se accede mediante el método público relevante desde el formulario. Google no ayuda realmente, ya que solo apunta hacia un elemento que es público y el otro privado, que no es el caso aquí.

¿Alguien ayuda?

El constructor de clients clase public es public pero tiene un parámetro de tipo ACTInterface que es private (¿está nested en una clase?). No puedes hacer eso. Debes hacer que ACTInterface al menos tan accesible como los clients .

Haz que la clase sea pública.

 class NewClass { } 

es lo mismo que:

 internal class NewClass { } 

entonces la clase tiene que ser pública

Si parece que el tipo ACTInterface no es public , pero utiliza la accesibilidad predeterminada de internal (si es de nivel superior) o private (si está nested en otro tipo).

Dando el tipo el modificador public lo arreglaría.

Otro enfoque es hacer que tanto el tipo como el método sean internal , si esa es su intención.

El problema no es la accesibilidad del campo ( oActInterface ), sino más bien del tipo ACTInterface sí mismo.

¿Cuál es la accesibilidad del tipo support.ACTInterface . El error sugiere que no es público.

No puede exponer una firma de método público donde algunos de los tipos de parámetros de la firma no son públicos. No sería posible llamar al método desde afuera ya que el llamador no podría construir los parámetros requeridos.

Si usted hace la support.ACTInterface público que eliminará este error. Alternativamente, reduzca la accesibilidad del método de formulario si es posible.

El problema no parece ser con la variable sino con la statement de ACTInterface. ¿Es ACTInterface declarado como interno por casualidad?

Si se produce este error cuando desea utilizar una variable de clase en un formulario nuevo, debe poner la definición de clase en el

Formname.Designer.cs

en lugar del archivo Formname.cs

Después de actualizar mi modelo de estructura de entidad, encontré este error infectando varios archivos en mi solución. Simplemente hice clic derecho en mi archivo .edmx y mi archivo TT y luego en “Ejecutar herramienta personalizada” y eso me hizo volver a la derecha luego de reiniciar Visual Studio 2012.

lo que sea que proporcione la clase ActInterface está bajo una clase privada, de esa manera se está recibiendo un error

cambiar ese tipo de clase a Public ActInterface resolverá

Cuando recibí este error, tuve una clase de “ayuda” que no declare como pública que causó este problema dentro de la clase que usó la clase “ayuda”. Hacer que el público de la clase “ayudante” resolviera este error, como en:

public ServiceClass {public ServiceClass (HelperClass _helper) {}}

public class HelperClass {} // Tenga en cuenta el público HelperClass que resolvió mi problema.

Esto puede ayudar a alguien más que se encuentra con esto.

Intenta hacer tu constructor privado así:

 private Foo newClass = new Foo();