将对象插入到具有不同基类型(继承)的值中

本文关键字:继承 类型 基类 插入 对象 | 更新日期: 2023-09-27 18:02:36

所以我有一个类型为SvgElement的对象,它包含一个值SvgPath(继承了SvgElement)。代码如下:

SvgElement createdElement;
//other operations. createdElement now has other data of SvgPath
if (createdElement.GetType() == typeof(SvgPath) & createdElement.ElementName == "path" && storedValue != "")
 createdElement.PathData = SvgPathBuilder.Parse(storedValue);
return createdElement

(注意:这是在unity中完成的,必须考虑到。net 2.0,因为unity冒犯了System.Linq)

现在SvgPathBuilder.Parse接受string并返回一个SvgPathSegmentList类型的对象到PathDataPathData通常是SvgPath中的一个变量,但我修改了SvgElement来临时取值,这样我就知道我正在测试的其他东西是否可以工作。

现在我已经给了你背景信息..我如何(通用代码-类型T的东西)写它,使SvgPathBuilder.Parse将存储在SvgPath。PathData而不是继承的基础SvgElement的PathData?

(不确定标题是否适合问题,请告知)

将对象插入到具有不同基类型(继承)的值中

可以将元素强制转换为SvgPath:(createdElement as SvgPath).PathData = SvgPathBuilder.Parse‌​(storedValue);

仅仅通过描述您想要达到的目的不是很清楚,但是考虑下面的设计,它仍然需要进一步更改以适应确切的需求

重要细节:

  • SvgElement的抽象属性,需要实现的子类,即SvgPath
  • 在TestSVG中使用的通用约束,以确保我们始终提供正确的类或其派生版本,在该类中您可以实现属性PathData的填充

        public abstract class SvgElement
        {
          public abstract List<SvgPath> PathData { get; set;}
        }
        public class SvgPath : SvgElement
        {
          public override List<SvgPath> PathData { get; set;}       
        }
        public class TestSvg<T> where T:SvgElement
        {
        }