【问题标题】:C# List<T> inheritanceC# List<T> 继承
【发布时间】:2015-12-11 06:39:44
【问题描述】:

假设我有一个名为 Field 的类

public class Field
{
    public string name {get;set;}
    public string type {get;set;}

}

对于我的程序,我需要构建一个列表,但列表中的某些字段是通用的,并且会在程序的少数部分中重复,我想将那些将被复制的字段分离到一个基类中,以便那些子类可以从基类继承而无需重复某些字段。 概念大致如下:

base classA {
    List<Field> list = new List<Field>();
    list.add(new Field(){name = "fieldNameA", type = "typeA"});
    list.add(new Field(){name = "fieldNameB", type = "typeB"});
    list.add(new Field(){name = "fieldNameC", type = "typeC"});
}

base classB {
    List<Field> list = new List<Field>();
    list.add(new Field(){name = "fieldNameX", type = "typeX"});
    list.add(new Field(){name = "fieldNameY", type = "typeY"});
    list.add(new Field(){name = "fieldNameZ", type = "typeZ"});
}


sub class {

   private void methodA() {
      //Inherits list initialized at 
      //     **base classA** above, 
      //and continues to initialize some other Fields

     list.add(new Field(){name = "fieldNameD", type = "typeD"});
     list.add(new Field(){name = "fieldNameE", type = "typeE"});

      //so at here finally i would have list which consists of fieldNameA to fieldName E
    }


    private void methodB() {
      //Inherits list initialized at 
      //      **base classB** above, 
      //and continues to initialize some other Fields

     list.add(new Field(){name = "fieldNameD", type = "typeD"});
     list.add(new Field(){name = "fieldNameE", type = "typeE"});

      //so at here finally i would have list which consists of fieldNameX, Y,Z,D,E
    }
}

我应该怎么做才能实现这一目标?

【问题讨论】:

  • 您展示的代码(更新为正确的 C# 语法后)应该完全符合您的需要。请澄清你有什么问题。还可以尝试更新 tile,使其看起来不需要从 List&lt;Field&gt; 继承,而是需要继承其他内容(可能是“如何使用基类中的字段”)。
  • 嗨,Alexei,我刚刚解决了这个问题。我已经更新了我的问题,现在我遇到了多重继承问题
  • 而不是澄清你已经完全改变了问题。完全改变问题并不受欢迎,尤其是在回答了原始问题的情况下。查看Chameleon questions 以获得更多指导(摘要 - 回滚编辑并提出新问题)。

标签: c# inheritance generic-list base-class


【解决方案1】:

我不确定你的意思是不是这样的构图:

class BaseClass {
    protected List<Field> list = new List<Field>();
    public BaseClass()
    {           
       list.add(new Field(){name = "fieldNameA", type = "typeA"});
       list.add(new Field(){name = "fieldNameB", type = "typeB"});
       list.add(new Field(){name = "fieldNameC", type = "typeC"});
    }
}

class SubClass : BaseClass {
    public SubClass() : base()  
    {           
       list.add(new Field(){name = "fieldNameD", type = "typeD"});
       list.add(new Field(){name = "fieldNameE", type = "typeE"});
    }
}

【讨论】:

  • 嗨,迈克,谢谢。它就像一个魅力.. 我还有一个问题,如果我有 2 个基类并且不同的方法会从任何一个基类继承怎么办?我已经相应地编辑了我的问题
  • @Mentos - C# 不支持多重继承,因此根据您想要实现的具体目标,您可能需要探索组合(即,您的子类并不是真正的子类,但它依赖于其他几个在内部保存实例的类)或使用您的类可以实现 multipel of 的接口(但这不会使您能够拥有包含元素的列表,就像您在原始问题);祝你好运 - 也许问一个不同的问题,并从架构的角度说明你的最终目标是什么
猜你喜欢
  • 2010-10-28
  • 1970-01-01
  • 2011-07-19
  • 2011-07-09
  • 1970-01-01
  • 1970-01-01
  • 2013-08-03
  • 2010-10-22
  • 1970-01-01
相关资源
最近更新 更多