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

发布于 2024-08-30 20:56:11 字数 511 浏览 5 评论 0原文

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

我需要将指向链表中节点的指针传递给方法。 当我这样做时,我得到一个“编译器错误 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 文件的巨大链表链表结构的集市。 要么我必须找到一种在不使用方法的情况下使用递归的方法,要么我需要找到一种传递指针节点或实际节点的方法。

How do I get around Inconsistant accessibilty error in C # ?

I need to pass a pointer to a node in a linked list to a method.
When I do, I get a "Compiler Error CS0051"

Example
The following sample generates 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()
  {
  }
}

That is a simple example. The actual program is a bit more complicated. I am actually using a node in a linked list to pass to the method
LinkedListNode node

The method uses recursion because the node is mart of a huge linked list structure of linked lists that outputs an xml file.
Either I have to find a way to use recursion without using methods or I need to find a way to pass pointers nodes or actual nodes.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

绳情 2024-09-06 20:56:11

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

在上面的示例中,如果您想在公共 F 方法上使用 B,则应该将其设置为公共。

You cannot have a parameter defined as less than public on a public method.

In the example above, B should be public if you want to use it on the public F method.

苦笑流年记忆 2024-09-06 20:56:11

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

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

The only way you could "get around" it is to make the method take a base type that is public as parameter instead of B. You can use object if there is no other base type. This is only useful if you have a public method that returns an internal type that later needs to be passed back to your code and it's generally not a good design. (Of course, the returning method would also have to return a public type.)

Otherwise you just have to make B a public type to make it work. What your code is saying right now is: anyone can call this method, but only classes in this assembly can access the parameter type. Of course, if they cannot access the parameter type then they cannot really call the method - that's what the C# compiler is telling you.

孤君无依 2024-09-06 20:56:11

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

If you think about a user of class A, they will be offered a public interface which includes void F(B b) . It's only logical that this user should be allowed to instantiate a B, otherwise the method F would be unusable.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文