Test Foro de elhacker.net SMF 2.1

Programación => Programación General => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: jaxoR en 2 Abril 2015, 05:41 AM

Título: Problema de accesibilidad
Publicado por: jaxoR en 2 Abril 2015, 05:41 AM
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);
       }
Título: Re: Problema de accesibilidad
Publicado por: El Benjo en 2 Abril 2015, 07:07 AM
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.
Título: Re: Problema de accesibilidad
Publicado por: DarK_FirefoX en 2 Abril 2015, 07:14 AM
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

Título: Re: Problema de accesibilidad
Publicado por: jaxoR en 2 Abril 2015, 23:16 PM
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();
Título: Re: Problema de accesibilidad
Publicado por: jaxoR en 6 Abril 2015, 04:49 AM
bump
Título: Re: Problema de accesibilidad
Publicado por: El Benjo en 6 Abril 2015, 05:55 AM
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();
Título: Re: Problema de accesibilidad
Publicado por: jaxoR en 9 Abril 2015, 19:22 PM
No, sigue el mismo error :S
Título: Re: Problema de accesibilidad
Publicado por: El Benjo en 10 Abril 2015, 05:36 AM
Intenta lo mismo con las comillas sencillas, es decir ponerlas de la forma \'
Título: Re: Problema de accesibilidad
Publicado por: jaxoR en 10 Abril 2015, 17:50 PM
Nop, sigue el mismo problema :(
Título: Re: Problema de accesibilidad
Publicado por: jaxoR en 14 Abril 2015, 16:40 PM
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);