I use a Model
在屏幕上绘制一些系列。您可以创建一个系列,例如LineSeries
or CurveSeries
并将它们添加到模型中:Model.Series.Add(myLineSeries);
。该系列有一个属性Points
,其中保存了所有点,您可以轻松添加一些:myLineSeries.Points.Add(...);
. Model
获取从基类继承的所有系列Series
.
但是当我将它添加到模型并想稍后添加一些点时,我必须将其转换回来:
//Model.Series[0].Points does not exists. I have to cast them...
var lineSeries = (Model.Series[0] as LineSeries);
if(lineSeries != null)
lineSeries.Points.Add(...);
var curveSeries = (Model.Series[0] as CurveSeries);
//Same code for CurveSeries
//Same code for other series types...
所以我必须一遍又一遍地执行相同的代码。如果您可以访问源代码,您可以说:让我们创建一个“点接口”或一个基类,其中所有属性都具有点。系列只需继承基类或接口即可。现在你可以说:
var Series = (Model.Series[0] as IPointSeries);
//Code only one time :)
但现在我无法访问系列和模型的源代码。我无法更改模型、系列或抽象系列基类的实现。
有没有一种通用的方法可以在不更改模型或系列的源代码的情况下执行此操作?喜欢为现有系列创建一个界面来以相同的方式访问它们吗?
您可以编写一组包装类,这样至少您不必多次编写了解多种基础类型的所有代码。
例如:
public class PointSeries
{
public List<Point> Points { get { return new List<Point>(); } }
}
public class CurveSeries
{
public List<Point> Points { get { return new List<Point>(); } }
}
public interface ISeriesWrapper
{
List<Point> Points { get; }
}
public class PointSeriesWrapper : ISeriesWrapper
{
public PointSeriesWrapper(PointSeries series)
{
_Series = series;
}
private PointSeries _Series;
public List<Point> Points { get { return _Series.Points; } }
}
public class CurveSeriesWrapper : ISeriesWrapper
{
public CurveSeriesWrapper(CurveSeries series)
{
_Series = series;
}
private CurveSeries _Series;
public List<Point> Points { get { return _Series.Points; } }
}
public static class SeriesWrapper
{
public static ISeriesWrapper Create(object series)
{
var pointSeries = series as PointSeries;
if (pointSeries != null)
return new PointSeriesWrapper(pointSeries);
var curveSeries = series as CurveSeries;
if (curveSeries != null)
return new CurveSeriesWrapper(curveSeries);
throw new NotSupportedException();
}
}
使用示例:
var pointSeries = SeriesWrapper.Create(Model.Series[0]);
lineSeries.Points.AddRange(pointSeries.Points);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)