CLR: .Net / Mono / Boo / Otros CLR > C#

 Error al declarar una clase...

(1/2) > >>

LenguajeC:
Hola a todos.
Espero que me tengan mucha paciencia y comprencíon ya que estoy estudiando con un manual y no tengo otra consulta que los foros y tutoriales de la web( y tengo 59 años).-
El programa que expongo a continuación me genera un el siguiente error.-

--- Citar ---'Clientes.datos.vec' no es accesible debido a su nivel de protección

--- Fin de la cita ---
Seguramente estoy declarando mal la clase pero si le pongo public empeora.-


--- Código: C# ---using System;using System.Collections.Generic; class Clientes{    class datos    {        private string [] vec;        public datos()        {               vec = new String[7];         }        public string this[int indice]        {            set            {                vec[indice] = value;            }            get            {                return vec[indice];            }        }       }        public static void detalle()    {        for(byte a = 1; a<50; a++)        {            Console.SetCursorPosition(a,00); Console.Write("=");             Console.SetCursorPosition(a,02); Console.Write("=");         }        Console.SetCursorPosition(17,01);        Console.Write(" Alta de Clientes ");        Console.SetCursorPosition(01,04);        Console.Write(" Nombre completo....:");        Console.SetCursorPosition(01,05);        Console.Write(" Dirección..........:");        Console.SetCursorPosition(01,06);        Console.Write(" Cód. postal........:");        Console.SetCursorPosition(01,07);        Console.Write(" Ciudad.............:");        Console.SetCursorPosition(01,08);        Console.Write(" Celular............:");        Console.SetCursorPosition(01,09);        Console.Write(" Crédito............:");        Console.SetCursorPosition(01,10);        Console.Write(" Plazo en días......:");    }        public static void ingreso()    {        datos _datos = new datos();        byte ver = 04;         string linea = "";        for(int cont = 0; cont<7; cont++)        {            do            {                Console.SetCursorPosition(22,ver);                linea = Console.ReadLine();             }while((linea == null) || (linea.Length==0));           // _datos.vec[cont] = linea;             ver++;        }       }           public static void Main(string[] args)    {        Console.Title = " Alta de Clientes";         detalle();        ingreso();                        Console.SetCursorPosition(01,12);        Console.Write(" Pulse una tecla para finalizar..."); Console.ReadKey();      }} 
Espero me puedan ayudar.-

Saludos.
Daniel

Valinor73:
Creo que el problema esta en que dentro de la definicion de una clase no es posible la definicion de otra. Estas definiendo la clase datos dentro de la clase Clientes, cuando lo correcto a mi entender es que la crees separada. Una vez definidas las dos clases si que te sera posible crear en cualquier clase, objectos de la otra.
Pruebalo. Si no es asi que alguien me corrija.
Un saludo

LenguajeC:
Hola Valinor73.
Esta línea estaba mal: // _datos.vec[cont] = linea; esta es la manera correcta para que funcione  _datos[cont] = linea;.-
Ahora tengo otro inconveniente, no logro leer el array desde el método principal, si desearan ayudarme yo agradecido.-

Saludos.
Daniel

ProfesorX:
Bueno, escribi mi respuesta hace 3 horas, pero no pude publicarla antes porque tuve que salir, veo que te contestaron en parte, aun asi, publico mi respuesta, con comentarios a ver si asi te queda mas claro.


--- Código: C# --- using System;using System.Collections.Generic; // Las clases no se anidan una dentro de otra, deben ir separadas.// Y de preferencia, una clase en cada archivo de codigo, esto// ultimo no es obligatorio, pero si recomendado.class datos{    // Declara vec de tipo public, no private, para evitar el error que te marca,    // no se cual era el problema que dices que    // te da haciendolo public, pero a mi no me da problema. Si te da    // problema con public, menciona especificamemnte cual es.    public string[] vec;    public datos()    {        vec = new String[7];    }    // Ya que estas declarando vec como public, no es necesario usar    // set/get, este solo se utilizaria si vec fuera private, pero    // lo estas haciendo mal de todas formas, ya que no puedes usar    // this como nombre de propiedad, pues this es palabra reservada    // de C#. La convencion normal (digo convencion, por que no es    // obligatorio, pero es algo que casi todo programador de C# hace)    // es usar nombres de variables con minuscula para variables privadas    // y nombres de variables con mayuscula para variables publicas.    // En otro bloque te pondre la manera correcta de hacerlo    //public string this[int indice]    //{    //    set    //    {    //        vec[indice] = value;    //    }    //    get    //    {    //        return vec[indice];    //    }    //}}  class Clientes{     public static void detalle()    {        for (byte a = 1; a < 50; a++)        {            Console.SetCursorPosition(a, 00); Console.Write("=");            Console.SetCursorPosition(a, 02); Console.Write("=");        }        Console.SetCursorPosition(17, 01);        Console.Write(" Alta de Clientes ");        Console.SetCursorPosition(01, 04);        Console.Write(" Nombre completo....:");        Console.SetCursorPosition(01, 05);        Console.Write(" Dirección..........:");        Console.SetCursorPosition(01, 06);        Console.Write(" Cód. postal........:");        Console.SetCursorPosition(01, 07);        Console.Write(" Ciudad.............:");        Console.SetCursorPosition(01, 08);        Console.Write(" Celular............:");        Console.SetCursorPosition(01, 09);        Console.Write(" Crédito............:");        Console.SetCursorPosition(01, 10);        Console.Write(" Plazo en días......:");    }     public static void ingreso()    {        datos _datos = new datos();        byte ver = 04;        string linea = "";        for (int cont = 0; cont < 7; cont++)        {            do            {                Console.SetCursorPosition(22, ver);                linea = Console.ReadLine();            } while ((linea == null) || (linea.Length == 0));            _datos.vec[cont] = linea;            ver++;        }    }     public static void Main(string[] args)    {        Console.Title = " Alta de Clientes";        detalle();        ingreso();          Console.SetCursorPosition(01, 12);        Console.Write(" Pulse una tecla para finalizar..."); Console.ReadKey();    }}  
Clase datos usando set/get, y variables privadas.


--- Código: C# --- class datos{    // Declara vec con minuscula para la variable private    private string[] vec;    // Declara la propiedad vec con mayuscula para la parte public    // Recuerda que ahora utilizaras _datos.Vec[cont] en lugar de    // _datos.vec[cont], ya que vec ahora es private    public string[] Vec    {        set        {            vec = value;        }        get        {            return vec;        }    }    public datos()    {        vec = new String[7];    }}  

--- Citar ---Ahora tengo otro inconveniente, no logro leer el array desde el método principal, si desearan ayudarme yo agradecido.-

--- Fin de la cita ---

No entiendo aqui especificamente que es lo que deseas hacer, si pudieras explicarnos mejor y de manera mas clara, seria excelente.

Si hiciste modificaciones al codigo que publicaste originalmente, publicalo de nuevo, especificando el error que te marca, y en que linea obtienes el error.

Saludos :)

LenguajeC:
Hola Profe
Que interesante para un estudiante solitario como yo encontrar a alguien con tanta predisposición para ayudar(enseñar) y tan didáctico.-
Te dejo mi código para que me digas porque desde el método Main no puedo leer el array.-



--- Código: C# ---using System;using System.Collections.Generic; class Clientes{    class datos    {        private string [] vec;        public datos()        {               vec = new String[7];         }        public string this[int indice]        {            set            {                vec[indice] = value;            }            get            {                return vec[indice];            }        }       }        public static void detalle()    {        for(byte a = 1; a<50; a++)        {            Console.SetCursorPosition(a,00); Console.Write("=");             Console.SetCursorPosition(a,02); Console.Write("=");         }        Console.SetCursorPosition(17,01);        Console.Write(" Alta de Clientes ");        Console.SetCursorPosition(01,04);        Console.Write(" Nombre completo....:");        Console.SetCursorPosition(01,05);        Console.Write(" Dirección..........:");        Console.SetCursorPosition(01,06);        Console.Write(" Cód. postal........:");        Console.SetCursorPosition(01,07);        Console.Write(" Ciudad.............:");        Console.SetCursorPosition(01,08);        Console.Write(" Celular............:");        Console.SetCursorPosition(01,09);        Console.Write(" Crédito............:");        Console.SetCursorPosition(01,10);        Console.Write(" Plazo en días......:");    }        public static void ingreso()    {        datos _datos = new datos();        string linea = "";        for(int cont = 0; cont<7; cont++)        {            do            {                Console.SetCursorPosition(22,cont+4);                linea = Console.ReadLine();             }while((linea == null) || (linea.Length==0));            _datos[cont] = linea;         }       }           public static void Main(string[] args)    {        Console.Title = " Alta de Clientes";          detalle();        ingreso();        datos d_atos = new datos();                Console.SetCursorPosition(01,12);          [i]Console.WriteLine(" Dirección...:" + d_atos[0]);[/i] Console.ReadKey();     }} 
Bueno eso es todo, luego pondré en práctica lo del post anterior.-

Saludos Profe.-
Daniel

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa