如何解决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文件。 我必须找到一种不使用方法来使用递归的方法,或者我需要找到一种方法来传递指针节点或实际节点。
答案 0 :(得分:4)
在公共方法上,您不能将参数定义为小于公共。
在上面的示例中,如果要在公共F方法上使用它,则B应该是公共的。
答案 1 :(得分:0)
你可以“绕过”它的唯一方法是使方法采用public作为参数而不是B
的基本类型。如果没有其他基本类型,您可以使用object
。这只有在你有一个返回内部类型的公共方法时才有用,后者需要将其传递回你的代码并且它通常不是一个好的设计。 (当然,返回方法也必须返回一个公共类型。)
否则,您只需将B
设为公共类型即可。您的代码现在所说的是:任何人都可以调用此方法,但只有此程序集中的类可以访问参数类型。当然,如果他们无法访问参数类型,那么他们就无法真正调用该方法 - 这就是C#编译器告诉你的。
答案 2 :(得分:0)
如果您考虑A类用户,他们将获得一个包含void F(B b)
的公共界面。应该允许该用户实例化B,这是合乎逻辑的,否则方法F将无法使用。