c# - 私有(private)类(Class)的公共(public)属性(property)

标签 c#

我有一个实现站点导航的 NavigationModel 类。在内部有一个 NavigationNode 的私有(private)实现,我希望能够在 NavigationModel 内声明它,但不能在其外部声明。我将如何实现这个目标?当我执行以下操作时:

public class NavigationModel
{
    public List<NavigationNode> NavigationNodes { get; set; }
    public NavigationModel()
    {

    }

    private class NavigationNode
    {

    }
}

属性告诉我:

Inconsistent accessibility: property type 'List' is less accessible than property 'NavigationModel.NavigationNodes'

最佳答案

引发错误的原因是声明 NavigationModel作为 public,您创建一个用于访问 NavigationModel 的公共(public)接口(interface)。该接口(interface)的一部分是公共(public)方法或属性的签名。这样,您就可以发布类(class) NavigationNode这应该是私有(private)的 - 因此会出现错误。

为了解决这个问题,您可以创建一个仅包含 NavigationNode 部分的公共(public)接口(interface)。您想要发布的内容。如果您不想发布任何内容,则该界面为空。以下示例显示了基本组件:

  • 公共(public)界面 INavigationNode .
  • 属性类型 List<INavigationNode> .
  • 私有(private)类(class) NavigationNode实现该接口(interface)。

public interface INavigationNode 
{
  // Add parts of NavigationNode that you want to publish
}

public class NavigationModel
{
    public List<INavigationNode> NavigationNodes { get; set; }
    public NavigationModel()
    {

    }

    private class NavigationNode : INavigationNode
    {

    }
}

关于c# - 私有(private)类(Class)的公共(public)属性(property),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47637803/

相关文章:

c# - Azure blob 存储 V12 - 使用专用类 BlockBlobStorage 的示例

c# - 从 WPF 中的不同位置访问表单

c# - 声明大数组时出现 OutOfMemoryException

c# - PropertyInfo.SetValue() 不工作但没有错误

c# - C# 是否支持任意精度算术?

c# - 是否有 .net 驱动程序支持与 PostgreSQL 完全验证的 SSL 连接?

C# else if 混淆

c# - 如何诊断混合托管/非托管 x32 .NET 应用程序中损坏的后缀模式

c# - 来自 C 背景,在 C# 中实现 const 引用数据表/结构的好方法是什么?

c# - 使用 GetOpenFileName 而不是 OpenFileDialog