包含异类型列表对象的动态列表

时间:2014-02-15 16:13:36

标签: c# .net list nested object-oriented-analysis

好的,我要说的第一件事就是我不是要求任何人走出他们的路,并且实际上写了一个有效的版本。除非有人非常棒,并认为这不是太多的工作。我通过为自己设定一个崇高的目标,并逐步努力,以此来学习,这就是它的本质。我真诚地感谢你们/ gals可以提供的任何指导或参考。我应该只从List继承一个类,但不知道该怎么做?

根据以下要求(如果您认为我应该采取不同的方式,请在此处纠正我),这是我订购的待办事项列表:

  1. 在此处获取反馈,了解是否/应如何更改要求
    • 请指出我对这些东西的好参考方向!
    • 说真的,现在告诉我你知道有些事情是不可能的!
  2. 确定最有效完成这些目标的对象     目标
  3. 如果有多个对象,请确定它们应如何链接或     相互关联
  4. 确定可行的集合类型     最适合SuperList
  5. 确定可行的集合类型     最适合ChildLists
  6. 确定后的步骤     更好的理解
  7. 我正在尝试设计以下内容(我知道下面有一些重叠,对不起。我希望它有意义!):

    具有以下要求的Dynamic_List_Of_Hetero_Type_Lists对象(如Class,Abstract,Struct,Interface ...)(对于长名称抱歉)

    1. 可以同时创建/使用多个版本
    2. 创建可以容纳的SuperList(Tuple,ArrayList或类似名称) 不同类型的ChildLists(IList,Tuple或类似)

      1. 请参阅下面的超级列表要求
    3. 如果我需要限制功能(比如可能通过隐藏/多态/等等控制列表的Add方法),我希望能够选择编写覆盖C#默认列表方法的方法(所以我不需要编写每个正常的C#方法,除非我想改变它。这是我在样板文件中的意思的一部分。)

    4. 能够巧妙地将非集合类型添加到正确的ChildList

      1. 类似于“AddItemsByType”方法,它接受一个非收集的输入,获取输入的inputTypes,If(每个inputType匹配任何ChildList的类型){//将每个输入添加到具有匹配inputType的ChildList } Else {// Throw Exception}

        1. (这意味着“AddItemsByType(1.5)”会很糟糕或不友好,因为有很多数字类型。所以你可能想在方法输入之前声明数据类型。)
    5. 一个在X SuperList索引处返回ChildList类型的方法(我知道静态类型和运行时类型之间可能存在差异。我还没有太多考虑解决这个问题。我从另一篇SO帖子中可以看出,“出于调试目的,请务必在方法中添加[条件(”DEBUG“)],因为以这种方式使用变量会以微妙的方式改变代码的性质。”)(我猜这将至少在上面的步骤中部分重用“巧妙添加...”。)

    6. SuperList有效要求(我不会挑剔是通过方法满足要求还是以其他方式定义列表的约束):

      1. SuperList在没有硬编码的ChildList类型的情况下启动

        1. 这意味着它必须能够通过构造函数和方法动态添加ChildList类型
      2. SuperList父级只能拥有每种类型的一个ChildList(例如“不能保存两个List,但可以保存List和List”。)

        1. 示例:如果SuperList已在任何索引中包含ChildList,则无法在另一个索引处创建/添加另一个ChildList。 (可以保存每种类型的一个列表)

        2. 问题:有哪些类型不起作用?

      3. 示例(下面的代码可以在一个代码块中运行。这个例子并不是为了指示对象的引用方式。我在这台机器上没有Visual Studio,下面的代码是我能做到的最好的代码do,所以请考虑伪代码。):

        List<string> Nutrients = new List<string>();
        List<int> ServingAmts = new List< int >();
        Dynamic_List_Of_Hetero_Type_Lists FoodNutritionFacts = new Dynamic_List_Of_Hetero_Type_Lists(Nutrients);
        FoodNutritionFacts.Add(ServingAmts);
        // Writes “Added new element” (to show that List.Add was overridden)
        string Nutrient = “Sodium”;
        int ServingAmt = 15;
        FoodNutritionFacts.AddItemsByType(ServingAmt , Nutrient); // Intentionally sent backwards
        Console.WriteLine(FoodNutritionFacts[0][0]);
        // Writes “Sodium”
        List<string> FoodItems = new List<string>();
        List<double> NetWeights = new List<double>();
        Dynamic_List_Of_Hetero_Type_Lists GroceryItems = new Dynamic_List_Of_Hetero_Type_Lists(FoodItems);
        GroceryItems.Add(NetWeights);
        // Writes “Added new element” (to show that List.Add was overridden)
        string FoodItem = “Kool-Aid Packet”;
        double NetWeight =3.6;
        GroceryItems.AddItemsByType(Nutrient , ServingAmt);
        If(GroceryItems[0].Count > 0 && FoodNutritionFacts[1].Count > 0)
        {
            Console.WriteLine(“This is just to show they still exist separately.”)
        }
        // Writes “This is just to show they still exist separately.”
        GroceryItems[1][0].GetType(); // Are there better ways to do this?
        // Returns that the type is double
        List<double> ItemHeight = new List<double>();
        GroceryItems.Add(ItemHeight);
        // Writes (for illustration purposes) “You can’t add another ChildList with type double. If you want to add a list of items into an existing ChildList, you can use AddRange” (or something better than AddRange?)
        

        我的背景:我用Java编程每周10-20小时,一年多一点,并在大约2年前每隔一周退休几个小时。在过去的两年里,我一直在每周5-10小时编写一些宏观的东西,但从来没有深入研究过。现在我正在努力提高我的C#技能,因为我计划很快申请开发人员工作。

0 个答案:

没有答案