我正在尝试了解列表如何在C#中运行,但我无法运行我的应用程序,因为我收到了这些消息:
错误1可访问性不一致: 属性类型'ClaseLista.ListNode'是 比财产更容易接近 'ClaseLista.List.PrimerNodo'C:\ Documents 和 设置\ Usuario \ Escritorio \ Listas \ ClaseLista \ List.cs 19 25 ClaseLista
错误2可访问性不一致: 属性类型'ClaseLista.ListNode'是 比财产更容易接近 'ClaseLista.List.UltimoNodo'C:\ Documents 和 设置\ 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; }
}
}
}
我该怎么办?
答案 0 :(得分:4)
您还需要公开ListNode ...
public class ListNode
答案 1 :(得分:2)
这只是一个与ListNode
类的可见性有关的问题 - 它被声明为
class ListNode
(因此internal
知名度)
而您的List
类被声明为
public class List
因为List
会声明一个或多个ListNode
类型的公共属性,ListNode
也必须公开:
public class ListNode
将修复它。
答案 2 :(得分:1)
问题是,您的ListNode
课程是内部的,而您的List
课程是公开的。 .NET程序集之外的代码可以访问List
类,但除非他们也可以访问PrimerNodo
类,否则他们不能使用UltimoNodo
或ListNode
属性,因此编译器会给你这个错误。
如果您希望程序集之外的代码能够访问ListNode
,则可以将其公开。否则,您可以将List
类的访问修饰符更改为内部,或将使用ListNode
的属性的访问修饰符更改为私有或内部。
答案 3 :(得分:1)
这是因为您将ListNode
定义为:
namespace ClaseLista
{
class ListNode
{
默认情况下,编译器为此提供internal
辅助功能。要摆脱错误,请将其更改为公开:
namespace ClaseLista
{
public class ListNode
{
这是必需的,因为您使用ListNode
类定义了部分公共API :
// This can't be public unless "ListNode" is public as well!
public ListNode PrimerNodo
{
get { return primerNodo; }
set { primerNodo = value; }
}
答案 4 :(得分:0)
将ListNode公开:
namespace ClaseLista
{
public class ListNode
{
//Constructor
private object nombre;
..
答案 5 :(得分:0)
类ListNode
中类型ClaseLista
的属性为public
,但ListNode
类型本身不公开。这为编译器创建了互斥的访问控制。 (毕竟,消费客户端不能很好地使用属性而不能使用该属性的类型。)
要使这些属性公开,ListNode
类也需要公开。