C#:将基类集合对象复制到派生类对象中

4mla1fn

我有如下的基类和派生类(这只是一个例子):

class Base_TripLog {
   public List<Base_Trip> trips = ...

   public Base_TripLog(string log_filename) {
      // load stuff into trips
   }
}

class Base_Trip {
   public string vehicle_id = ...;
   public Dictionary<ulong, Base_Waypoint> waypoints = ... 

   public Base_Trip() {
   }

   public add_waypoint(ulong epoch_sec, Base_Waypoint waypoint) {
      waypoints.Add(epoch_sec, waypoint);
   }
}

class Base_Waypoint {
   /// time and gps coords
}

class Derived_TripLog : Base_TripLog {
    public string company_name;
    public new List<Derived_Trip> trips = ...

    public Derived_TripLog(string company_name, string filename) : base(filename) {
       this.company_name = company_name;

       if (trips.Count > 0) {
          // do stuff
       }
    }
}

class Derived_Trip : Base_Trip {
    public int duration_sec;

    public Derived_Trip() : base() {
       duration = compute_trip_duration(waypoints)
    }
}

Derived_TripLog构造函数使用基本构造函数加载路标文件。派生类中的旅行自然仍然是空的。我打算将base.trips复制到派生行程中。

两个问题:

  1. 是复制处理这种情况的标准方法吗?如果基层Trip类有很多成员和集合,那么复制所有成员可能会很痛苦。

  2. 如果复制是标准方法,那么我实质上将内存使用量增加了一倍。(base.trips可能会很大。)似乎我可以只做base.trips.Clear()来释放这些资源。是否有正确的方法?

HimBromBeere

这就是泛型的用途。您不必在每个子类中都有不同类型的行程列表,而只需在基类中包含一个具有通用类型的列表:

class Base_TripLog<TripType> where TripType: Base_Trip {
   public List<TripType> trips = ...

   public Base_TripLog(string log_filename) {
      // load stuff into trips
   }
}

现在,您可以使用正确的泛型参数继承此类:

class Derived_TripLog : Base_TripLog<Derived_Trip> 
{
    public string company_name;

    public Derived_TripLog(string company_name, string filename) : base(filename) 
    {
        this.company_name = company_name;

        if (trips.Count > 0) {
        // do stuff
    }
}

这样,您无需为每个类都重新声明属性,而只需对派生自的所有类型进行单个定义Base_Trip

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

创建类型为<派生类>的变量以将<基类>对象存储在C#中

从派生类向量复制到基类向量

从C#中的派生类对象创建新的基类对象

是否将继承的基类复制到派生类?

在 C# 中使用基类和派生类实例化数组中的对象

将shared_ptr的向量复制到抽象基的派生类

从派生类创建基类对象

对派生类对象的基类引用

在对基类的引用中存储派生类的对象

包含基类/派生类对象的C ++数组

如何在C ++中的基类中创建派生类的对象

在C++中将抽象基类的不同派生类的对象存储在数组中

gcc 4.4.7编写的C ++对象模型:派生类对象中占用的基类子对象填充

如何将基类对象的属性复制到子类对象

使用指针解释隐式派生类对象到基类对象转换的概念

c#使用派生类时的对象类型

代码会复制到派生类吗?

从C ++中另一个(不相关!)类的基类引用派生类的对象

返回派生类型的基类中的C#方法

如何删除派生类中基类对象的新对象?

在C ++继承中,当指向基类的指针对象指向派生类时,不调用派生类析构函数

将 unique_ptr 的内容复制到未知的派生类

使用派生类创建基类对象

如何使用基类的指针形成派生类对象?

从派生类对象python调用基类的方法

将对象转换为基类或派生类?

在基类中使用派生类对象

指向派生类语法实例的基类对象数组?

引用派生类时基类的对象大小