Problema de accesibilidad

Iniciado por jaxoR, 2 Abril 2015, 05:41 AM

0 Miembros y 1 Visitante están viendo este tema.

jaxoR

Hola, tengo un problema que no puedo solucionar. Me arroja error al tratar de pasar un registro como parámetro a un método.

Error:
CitarError   1   Incoherencia de accesibilidad: el tipo de parámetro 'registro' es menos accesible que el método 'método'

Código donde me arroja el error:

Código (csharp) [Seleccionar]
public partial class Form1 : Form
   {
       struct registro
       {
           public String nombre;
           public String apellido;
           public String dias;
           public String horario;
       }

public void ObtenerAlumno(registro alumno, int d)
       {
           char hora = ObtenerHorario(alumno.horario, alumno.dias, d);
           String horario = HoraACadena(hora);
           richTextBox1.Text = alumno.nombre + "   " + alumno.apellido + "   ";

       }

public Form1()
       {
           InitializeComponent();

           registro alumno;
           int nd = 0;
           ObtenerAlumno(alumno, nd);
       }

El Benjo

Eso se debe a que la estructura es privada y el método es público. Verás el propósito de hacer público un método es hacerlo accesible fuera de la clase en que es declarado. Si tu método es llamado desde otra clase entonces debes hacer pública también la estructura. Si tu método no va ser llamado desde otra clase, entonces declara el método cómo privado.

Dinos si con esto se resolvió tu problema.
www.es.neftis-ai.com

Sí hay un mejor lenguaje de programación y es ese con el que puedes desarrollar tus objetivos.

DarK_FirefoX

#2
Primero que todo, me parece que tienes que inicializar

Código (csharp) [Seleccionar]
registro alumno

O sea, algo como:

Código (csharp) [Seleccionar]
registro alumno = new registro();

sino, te va a saltar un error también.

Ahora, en cuanto al error al que te refieres, te explico. Como el método ObtenerAlumno es public, tu lo puedes llamar desde fuera de la clase del formulario. En este caso, como el

Código (csharp) [Seleccionar]
struct registro debes hacerlo público,
Código (csharp) [Seleccionar]
public struct registro o puedes también hacer el método ObtenerAlumno que sea private

Lo puedes hacer de acuerdo a tus necesidades. Lo que pasa es que si el método es público y el struct no lo es, como se supone que vas a pasarle un "registro" al método desde afuera de la clase si no puedes acceder al struct para definirlo porque es privado.

Espero haberte ayudado.
Saludos


jaxoR

Ahora me arroja error al ejecutar, pero no al cambiar.

CitarSintaxis incorrecta cerca de ','.

Código (csharp) [Seleccionar]
SqlCommand Comando = new SqlCommand(string.Format("Select (Nombre, Apellido, Dias, Horario) from chicos where Dias like '%{0}%'", nd.ToString()), db);
                SqlDataReader reader = Comando.ExecuteReader();

jaxoR


El Benjo

Creo que ese error se debe a que la cadena que devuelve nd.ToString() debería estar encerrada entre comillas. Es decir algo así:

Código (csharp) [Seleccionar]
SqlCommand Comando = new SqlCommand(string.Format("Select (Nombre, Apellido, Dias, Horario) from chicos where Dias like '%{0}%'", "\"" + nd.ToString() + "\""), db);
                SqlDataReader reader = Comando.ExecuteReader();
www.es.neftis-ai.com

Sí hay un mejor lenguaje de programación y es ese con el que puedes desarrollar tus objetivos.

jaxoR


El Benjo

Intenta lo mismo con las comillas sencillas, es decir ponerlas de la forma \'
www.es.neftis-ai.com

Sí hay un mejor lenguaje de programación y es ese con el que puedes desarrollar tus objetivos.

jaxoR

Nop, sigue el mismo problema :(

jaxoR

#9
Bueno, busqué la solución por mi mismo.

La coloco aquí por si otro tiene el mismo problema. El problema es la consulta al select, le saque los paréntesis de lo que quería obtener, y se solucionó.

La consulta quedaría así:

Código (csharp) [Seleccionar]
SqlCommand Comando = new SqlCommand(string.Format("Select Nombre, Apellido, Dias, Horario from chicos where Dias like '%{0}%'", snd), db);