【问题标题】:Is it possible to use inheritance or polymorphism to have subclasses with different properties in c#? [closed]是否可以使用继承或多态在 c# 中拥有具有不同属性的子类? [关闭]
【发布时间】:2020-07-09 12:24:07
【问题描述】:

我正在为网站制作动态侧边栏。我想做一些类似于继承但倒退的事情(让我知道是否有更好的方法)

我基本上会有两个类作为侧边栏类的一部分:

Nav{ String Name; String Path; }

DropDownNav { String Name; List<Nav> Navs; }

显然侧边栏可能有这样的东西:

Sidebar{ List<Nav> List<DropDownNav> }

但我想知道是否可以使用多态性或继承来给我这样的东西

Sidebar{ List<Nav> }

将它们保持为一个对象,但防止 Nav 拥有导航列表,并防止 DropDownNav 拥有路径。实现这一目标的最佳方法是什么?

【问题讨论】:

    标签: c# class object inheritance polymorphism


    【解决方案1】:

    您所描述的是许多 UI 框架已经实现的。您正在描述递归数据结构。在你的情况下,你需要选择你想要的结构。

    一个很好的例子是MenuItem,其中一个菜单项有一个标签,如果它包含子项,那么它有一个下拉菜单,其中的子项也是MenuItems。这将创建一个树结构。

    要在您的情况下实现这一点,您可能希望它都具有与DropDownNav 相同的类型,其中Nav 是叶节点,这是节点DropDownNav 的特例。如果它不是叶子,你似乎也忽略了树的价值。

    class Sidebar
    {
        List<DropDownNavItem> items;
    }
    
    class DropDownNavItem // Equivalent of DropDownNav
    {
        public List<NavItem> Children { get; }
    
        public string Path { get; }
    
        public DropDownNavItem(List<NavItem> children, string path = null)
        {
            Children = children;
            Path = path;
        }
    }
    
    class NavItem : DropDownNavItem // Equivalent of Nav
    {
        public NavItem(string path) : base(new List<NavItem>(), path)
        {
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2023-03-20
      • 2019-07-10
      • 2022-11-02
      • 2020-06-23
      • 2022-01-20
      • 2016-01-08
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      相关资源
      最近更新 更多