将对象插入到具有不同基类型(继承)的值中
本文关键字:继承 类型 基类 插入 对象 | 更新日期: 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
类型的对象到PathData
。PathData
通常是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 { }