C#列表<;T>;遗产

C#列表<;T>;遗产,c#,inheritance,generic-list,base-class,C#,Inheritance,Generic List,Base Class,假设我有一个叫做Field的类 public class Field { public string name {get;set;} public string type {get;set;} } 对于我的程序,我需要建立一个列表,但是列表中的一些字段是通用的,并且会在程序的少数部分中复制,我想将那些将被复制到基类中的字段分离出来,这样这些子类就可以从基类继承,而不必复制某些字段概念大致如下: base classA { List<Field> list

假设我有一个叫做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
    }
}
基本类a{
列表=新列表();
添加(新字段(){name=“fieldNameA”,type=“typeA”});
添加(新字段(){name=“fieldNameB”,type=“typeB”});
添加(新字段(){name=“fieldNameC”,type=“typeC”});
}
基本类B{
列表=新列表();
添加(新字段(){name=“fieldNameX”,type=“typeX”});
添加(新字段(){name=“fieldNameY”,type=“typeY”});
添加(新字段(){name=“fieldNameZ”,type=“typeZ”});
}
子类{
私有无效方法a(){
//继承在初始化时初始化的列表
//**基础类别A**以上,
//并继续初始化其他一些字段
添加(新字段(){name=“fieldNameD”,type=“typeD”});
添加(新字段(){name=“fieldNameE”,type=“typeE”});
//所以在这里,最后我会有一个列表,它由fieldNameA到fieldName组成
}
私有无效方法b(){
//继承在初始化时初始化的列表
//**基础B类**以上,
//并继续初始化其他一些字段
添加(新字段(){name=“fieldNameD”,type=“typeD”});
添加(新字段(){name=“fieldNameE”,type=“typeE”});
//所以在这里,最后我会有一个由fieldNameX,Y,Z,D,E组成的列表
}
}

我该怎么做才能做到这一点呢?

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

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"});
    }
}
类基类{
受保护列表=新列表();
公共基类()
{           
添加(新字段(){name=“fieldNameA”,type=“typeA”});
添加(新字段(){name=“fieldNameB”,type=“typeB”});
添加(新字段(){name=“fieldNameC”,type=“typeC”});
}
}
类子类:基类{
public子类():base()
{           
添加(新字段(){name=“fieldNameD”,type=“typeD”});
添加(新字段(){name=“fieldNameE”,type=“typeE”});
}
}

您显示的代码(当更新为正确的C#语法时)应该完全满足您的需要。请澄清你有什么问题。同时尝试更新tile,使其看起来不需要从
列表继承,而需要其他内容(可能是“如何使用基类中的字段”)。嗨,Alexei,我刚刚解决了这个问题。我已经更新了我的问题,现在我有多重继承的问题,而不是澄清你已经完全改变了这个问题。完全改变问题是不受欢迎的,尤其是当原来的问题得到回答时。查看更多指南(摘要-回滚编辑并提出新问题)。嗨,迈克,谢谢。它很有魅力。。我还有一个问题,如果我有两个基类,并且不同的方法将从其中一个基类继承,该怎么办?我已编辑了我的问题accordingly@Mentos-C#不支持多重继承,因此根据您试图实现的内容,您可能需要探索组合(即,您的子类不是真正的子类,但它依赖于内部包含实例的几个其他类)或者使用您的类可以实现multipel of的接口(但这并不能让您像在原始问题中那样拥有包含元素的列表);祝你好运——也许可以问一个不同的问题,并从架构的角度说明你的最终目标是什么