如何解决C#中不一致的可访问性错误?

时间:2010-04-28 23:33:12

标签: c# methods accessibility

如何解决C#中的Inconsistant accessibilty错误?

我需要将指向链接列表中的节点的指针传递给方法。 当我这样做时,我得到一个“编译器错误CS0051”

实施例 以下示例生成CS0051:

// CS0051.cs
public class A
{
  // Try making B public since F is public
  // B is implicitly private here
  class B
  {
  }

  public static void F(B b)  // CS0051
  {
  }

  public static void Main()
  {
  }
}

这是一个简单的例子。实际的程序有点复杂。我实际上是使用链表中的节点传递给该方法 LinkedListNode节点

该方法使用递归,因为该节点是链接列表的巨大链表结构的市场,其输出xml文件。 我必须找到一种不使用方法来使用递归的方法,或者我需要找到一种方法来传递指针节点或实际节点。

3 个答案:

答案 0 :(得分:4)

在公共方法上,您不能将参数定义为小于公共。

在上面的示例中,如果要在公共F方法上使用它,则B应该是公共的。

答案 1 :(得分:0)

你可以“绕过”它的唯一方法是使方法采用public作为参数而不是B的基本类型。如果没有其他基本类型,您可以使用object。这只有在你有一个返回内部类型的公共方法时才有用,后者需要将其传递回你的代码并且它通常不是一个好的设计。 (当然,返回方法也必须返回一个公共类型。)

否则,您只需将B设为公共类型即可。您的代码现在所说的是:任何人都可以调用此方法,但只有此程序集中的类可以访问参数类型。当然,如果他们无法访问参数类型,那么他们就无法真正调用该方法 - 这就是C#编译器告诉你的。

答案 2 :(得分:0)

如果您考虑A类用户,他们将获得一个包含void F(B b)的公共界面。应该允许该用户实例化B,这是合乎逻辑的,否则方法F将无法使用。