用C#列出工作(Working with C# lists)

2019-10-30 05:12发布

,我想了解如何列出了C#的工作,但我不能运行的应用程序我的,因为我得到这些消息:

错误1可访问性不一致:属性类型 'ClaseLista.ListNode' 比属性 'ClaseLista.List.PrimerNodo' C不易接近:\ Documents和Settings \ Usuario \ Escritorio \ Listas \ ClaseLista \ List.cs 19 25个ClaseLista


错误2可访问性不一致:属性类型 'ClaseLista.ListNode' 比属性 'ClaseLista.List.UltimoNodo' C不易接近:\ Documents和Settings \ Usuario \ Escritorio \ Listas \ ClaseLista \ List.cs 24 25个ClaseLista


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using ClaseLista;

namespace Listas
{
    class Program
    {
        static void Main(string[] args)
        {
            List Lista1 = new List();
            int opcion = 1;
            while (opcion > 0 && opcion < 3)
            {
                Console.WriteLine("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
                Console.WriteLine("x Menú Principal (dos datos) x");
                Console.WriteLine("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
                Console.WriteLine("x                            x");
                Console.WriteLine("x 1: Insertar Alumnos        x");
                Console.WriteLine("x 2: Imprimir Lista          x");
                Console.WriteLine("x 3: Salir                   x");
                Console.WriteLine("x                            x");
                Console.WriteLine("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
                Console.Write("Ingrese opción: ");
                opcion = int.Parse(Console.ReadLine());
                switch (opcion)
                {
                    case 1: int numero; string nombre, codigo;
                        Console.Write("Ingrese número de elementos: ");
                        numero = int.Parse(Console.ReadLine());
                        for (int i = 1; i <= numero; i++)
                        {
                            Console.WriteLine("Datos del alumno " + i);
                            Console.Write("Ingrese Nombre: ");
                            nombre = (Console.ReadLine());
                            Console.Write("Ingrese Codigo: ");
                            codigo = (Console.ReadLine());
                            Lista1.InsertaInicio(nombre, codigo);
                        }
                        break;
                    case 2:
                        if (Lista1.EsVacio())
                        {
                            Console.WriteLine("Lista Vacia");
                        }
                        else
                        {
                            Lista1.Imprimir();
                        }
                        break;
                }
            }
        }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ClaseLista
{
    public class List
    {
        //Constructor
        private ListNode primerNodo;
        private ListNode ultimoNodo;
        public List()
        {
            primerNodo = null;
            ultimoNodo = null;
        }
        //Propiedades
        public ListNode PrimerNodo
        {
            get { return primerNodo; }
            set { primerNodo = value; }
        }
        public ListNode UltimoNodo
        {
            get { return ultimoNodo; }
            set { ultimoNodo = value; }
        }
        //insertar al inicio
        public void InsertaInicio(object nom, object cod)
        {
            if (EsVacio())
                primerNodo = ultimoNodo = new ListNode(nom, cod, null);
            else
            {
                primerNodo = new ListNode(nom, cod, primerNodo);
            }
        }
        //comprobar si es vacio
        public bool EsVacio()
        {
            return primerNodo == null;
        }
        //Imprimir
        public void Imprimir()
        {
            ListNode current = primerNodo;
            while (current != null)
            {
                Console.WriteLine("|" + current.Nombre + " " + current.Codigo);
                current = current.Siguiente;
            }
        }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ClaseLista
{
    class ListNode
    {
        //Constructor
        private object nombre;
        private object codigo;
        private ListNode siguiente;
        public ListNode()
        {
            nombre = null;
            codigo = null;
            siguiente = null;
        }
        public ListNode(object nomb, object cod, ListNode sig)
        {
            nombre = nomb;
            codigo = cod;
            siguiente = sig;
        }
        //Propiedades
        public object Nombre
        {
            get { return nombre; }
            set { nombre = value; }
        }
        public object Codigo
        {
            get { return codigo; }
            set { codigo = value; }
        }
        public ListNode Siguiente
        {
            get { return siguiente; }
            set { siguiente = value; }
        }
    }
}

我能做什么?

Answer 1:

你需要做ListNode公众以及...

public class ListNode


Answer 2:

它只是做你的知名度的问题ListNode类-这被声明为

class ListNode

(并因此具有internal可见性)

而您的List类被声明为

public class List

由于List然后宣布类型的一个或多个公共属性ListNodeListNode也必须是公开的:

public class ListNode

将修复它。



Answer 3:

这是因为你已经ListNode定义为:

namespace ClaseLista
{
    class ListNode
    {

默认情况下,编译器会发出这样的一个internal辅助功能。 为了摆脱错误的,改变这是市民:

namespace ClaseLista
{
    public class ListNode
    {

因为你定义使用你的公共API的一部分,这是必需的ListNode类:

// This can't be public unless "ListNode" is public as well!
public ListNode PrimerNodo
{
    get { return primerNodo; }
    set { primerNodo = value; }
}


Answer 4:

问题是,你的ListNode类是内部的,而你的List类是公共的。 你的.NET程序集外部的代码可以访问List类,但他们不能使用PrimerNodoUltimoNodo性质,除非他们可以访问ListNode过班,所以编译器给你的错误。

如果你希望你的组件外部代码能够访问ListNode ,你可以把它公开。 否则,你可以改变访问修饰符List类的内部或改变使用性质的访问修饰符ListNode私人或内部。



Answer 5:

让ListNode市民:

namespace ClaseLista
{
   public class ListNode
   {
      //Constructor
      private object nombre;
      ..


Answer 6:

你的类型的属性ListNode在类ClaseListapublic但是ListNode类型本身是不公开的。 这为编译器互斥访问控制。 (毕竟,消费者客户机不能很好地使用属性,而不能使用类型该属性。)

对于这些属性是公共的ListNode类也必须是公开的。



文章来源: Working with C# lists