Estoy tratando de pasar un objeto (una referencia al usuario actualmente conectado, básicamente) 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. Buscar en Google realmente no ayuda, ya que solo apunta a que un elemento es público y el otro privado, que no es el caso aquí.
Alguien ayuda?
Haz pública la clase.
es lo mismo que:
entonces la clase tiene que ser pública
fuente
Si parece que el tipo
ACTInterface
no lo espublic
, pero está usando la accesibilidad predeterminada deinternal
(si es de nivel superior) oprivate
(si está anidado en otro tipo).Darle al tipo el
public
modificador lo arreglaría.Otro enfoque es hacer tanto el tipo como el método
internal
, si esa es su intención.El problema no es la accesibilidad del campo (
oActInterface
), sino del tipo enACTInterface
sí.fuente
¿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 la persona que llama no pudo construir los parámetros requeridos.
Si haces
support.ACTInterface
público eso eliminará este error. Alternativamente, reduzca la accesibilidad del método de formulario si es posible.fuente
El problema no parece ser con la variable sino con la declaración de ACTInterface. ¿Es ACTInterface declarado como interno por casualidad?
fuente
Cuando recibí este error, tenía una clase "auxiliar" que no declaró pública que causó este problema dentro de la clase que utilizaba la clase "auxiliar". Hacer pública la clase "ayudante" resolvió este error, como en:
Public ServiceClass {public ServiceClass (HelperClass _helper) {}}
public class HelperClass {} // Tenga en cuenta la HelperClass pública que resolvió mi problema.
Esto puede ayudar a alguien más que se encuentre con esto.
fuente
El error dice que 'support.ACTInterface' es menos accesible porque ha hecho que la interfaz sea privada, al menos hacerla interna o hacerla pública.
fuente
Puede obtener el parámetro (clase que tiene menos accesibilidad) y
object
luego convertirlo a su clase poras
palabra clave.fuente
Si este error ocurre cuando quiere usar una variable de clase en una nueva forma, debe poner la definición de clase en
en lugar del archivo Formname.cs.
fuente
Después de actualizar mi modelo de marco 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 hice clic en "Ejecutar herramienta personalizada" y eso me hizo volver justo después de reiniciar Visual Studio 2012.
fuente
Intenta hacer que tu constructor sea privado así:
fuente