私人类的公共财产

时间:2017-12-04 16:29:24

标签: c#

我有一个实现网站导航的NavigationModel类。在内部有一个NavigationNode的私有实现,我希望能够在NavigationModel中声明但不能在其外部声明。我怎么做到这一点?当我执行以下操作时:

{{1}}

该物业告诉我:

  

可访问性不一致:属性类型   “列表”不太容易访问   属性“NavigationModel.NavigationNodes”

2 个答案:

答案 0 :(得分:4)

引发错误是因为通过将NavigationModel声明为public,您创建了一个用于访问NavigationModel的公共接口。此接口的一部分是公共方法或属性的签名。通过这种方式,您发布了应该是私有的类NavigationNode - 因此错误。

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

  • 公共接口INavigationNode
  • List<INavigationNode>类型的属性。
  • 实现接口的私有类NavigationNode
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
    {

    }
}

答案 1 :(得分:0)

NavigationNode需要公开才能使其正常工作。使其公开仍然将声明保持在包含类NavigationModel内部,而NavigationModel之外的类可以引用它。