C# 通过派生类访问和修改对象

C# 通过派生类访问和修改对象,c#,wpf,C#,Wpf,我正在尝试创建一个BaseListWindow类作为其他ListWindow的基类。每个ListWindow操作一个不同对象列表(汽车、火车或飞机列表)。每个对象列表都是另一个称为车辆的对象的成员 public class Vehicles { private List<Car> _cars; private List<Train> _trains; // ... getters and setters too

我正在尝试创建一个
BaseListWindow
类作为其他
ListWindow
的基类。每个
ListWindow
操作一个不同对象列表(汽车、火车或飞机列表)。每个对象列表都是另一个称为车辆的对象的成员

 public class Vehicles
    {
        private List<Car> _cars;
        private List<Train> _trains;
        // ... getters and setters too
   }
我有几个问题:

  • 在哪里初始化派生类的成员?在基构造函数中还是在派生类中

  • 如何操作基类中的对象列表?当我试图修改基类中的_元素时,该对象始终为null,我怀疑基类中的Vehicles对象与派生类中的Vehicles对象不同

  • 使用包含少量对象差异列表的对象,然后使用
    BaseListWindow
    和派生类来访问和修改这些对象,这是一种好方法

  • 我的想法是
    BaseListWindow
    保存对象载体,以便它可以访问任何对象列表,但我的问题是访问基类中的这个对象列表。这很难,因为每个派生类的列表类型都不同

    我希望我没有错过这一切的重点。
    谢谢。

    我不知道如何回答你的问题。派生类的成员仅存在于派生类(或此派生类的派生类)中,因此不能在基构造函数中初始化它们。派生对象和基础对象中的_元素相同,因为它们是相同的对象。但本质上我认为你的主要问题是你混合了视图层和模型层。窗口类应该只显示数据,而不是存储数据。数据应该存储在模型层中,并且在这两者之间应该有一个ViewModel层。您的设计使您创建了一个派生的窗口类并将其抽象化:抽象控件很奇怪,重写控件使其抽象更奇怪。好吧,我认为我的方法是错误的,我将尝试更好地理解MVVM并应用它。谢谢你们两位!不要这样做。请参见MVVM并使用创建视图模型和视图集。然后,ViewModels可以从某个基类继承,您可以在该基类中放置所有的基本功能?我不能接受任何答案,因为没有。这条评论解决了我的问题,但我不能推翻他们。我不知道如何回答你的问题。派生类的成员仅存在于派生类(或此派生类的派生类)中,因此不能在基构造函数中初始化它们。派生对象和基础对象中的_元素相同,因为它们是相同的对象。但本质上我认为你的主要问题是你混合了视图层和模型层。窗口类应该只显示数据,而不是存储数据。数据应该存储在模型层中,并且在这两者之间应该有一个ViewModel层。您的设计使您创建了一个派生的窗口类并将其抽象化:抽象控件很奇怪,重写控件使其抽象更奇怪。好吧,我认为我的方法是错误的,我将尝试更好地理解MVVM并应用它。谢谢你们两位!不要这样做。请参见MVVM并使用创建视图模型和视图集。然后,ViewModels可以从某个基类继承,您可以在该基类中放置所有的基本功能?我不能接受任何答案,因为没有。这句话解决了我的问题,但我不能推翻他们。
    public abstract class BaseListWindow<T> : Window where T : IListElem 
    {
        protected Vehicles _vehicles;
        public List<T> _element;
    
      public BaseListWindow(Vehicles v, List<T> listElement)
        {
            _vehicles = v;
            _element = listElement;
        }
    }
    
    public partial class CarsListWindow : BaseListWindow<Car>
          {
          public CarsListWindow(Vehicle v, List<Car> listElement) : base(v, listElement)
            {
                _vehicles = v;
                _vehicles.Cars = listElement;
            }
     }