首页 > 解决方案 > C# 限制类的使用

问题描述

下面的代码做了我想做的事。Main 方法中的代码看起来和行为完全符合预期。但是,如果 UserMenu、Home 和 DropdownMenu2 类只能由 HeaderNavigationMenu 使用,以防止其他开发人员试图在 HeaderNavigationMenu 类之外使用它们,那将是更可取的。此外,大多数文章都不愿公开所有内容。

问题:下面使用的设计模式是否合适,或者在这种情况下是否有更好、更容易接受的设计模式?


编辑:这种设计的原因。

  1. 我希望 HeaderNavigationMenu 的最终用户能够使用点符号来获取可用选项的列表。这个架构实现了这个目标(例如:navigationMenu.DropdownMenu2.SelectOption3())
  2. 希望最终可能需要编辑代码以了解 UserMenu、Home 和 DropDownMenu2 类的其他人非常专门设计为由 HeaderNavigationMenu 类实现。

public class HeaderNavigationMenu
{
    public HeaderNavigationMenu()
    {
        UsersMenu = new UsersMenu();
        Home = new Home();
        DropdownMenu2 = new DropdownMenu2();
    }

    public UsersMenu UsersMenu { get; set; }
    public Home Home { get; set; }
    public DropdownMenu2 DropdownMenu2 { get; set; }
}

public class UsersMenu
{
  ...
}

public class Home
{
  ...
}

public class DropdownMenu2
{
  public void SelectOption3()
  {
    ...
  }
  ...
}

static void Main(string[] args)
{
  HeaderNavigationMenu navigationMenu = new HeaderNavigationMenu();
  navigationMenu.DropdownMenu2.SelectOption3();

  // The following code is an example of undesired capability; 
  // prefer if Home class could only be 
  // used by HeaderNavigationMenu class
  Home home = new Home();
}

标签: c#design-patternsarchitecture

解决方案


限制对类构造函数的访问。如果它们被声明为“内部”,那么这些类只能由您的代码创建。


推荐阅读