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

问题描述 投票:0回答:1

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

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()来释放这些资源。如果有正确的方法?

c# inheritance derived-class base-class
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.