我正在做一些项目,我遇到了一些我不知道是否可以解决的问题。 所以我的问题是这样的:
我的项目中有4个课程:
public abstract class ABaseDynamicLayer
{
public virtual int LayerID { get; set; }
public virtual string URIPath { get; set; }
}
public class RasterDynamicLayer : ABaseDynamicLayer
{
}
public class TerrainDynamicLayer : ABaseDynamicLayer
{
}
public class VectorDynamicLayer : ABaseDynamicLayer
{
}
现在我的数据库看起来像这样:
T_DYNAMIC_LAYERS
ID | URIPath | TYPE |
---------------------------
1 | c:\map1.mp | 1 |
2 | c:\map2.mp | 3 |
3 | c:\map5.mp | 2 |
T_TYPES
ID | DESCRIPTION |
---------------------
1 | Raster |
2 | Terrain |
3 | Vector |
现在我的目标是将T_DYNAMIC_LAYERS映射到我的项目,当我这样做时,我不想保存图层的类型,而是想要从我的类列表中创建拟合对象作为T_DYNAMIC_LAYERS中提到的类型。
例如:
假设我们正在映射T_DYNAMIC_LAYERS中的第一行。 1)我们将ID列映射到ID属性。 2)我们将URIPath列映射到URIPath到URIPath属性。
这很容易,但是想要的结果就是我希望从第一行得到RasterDynamicLayer的对象,因为行中的类型是1(1等于RasterDynamicLayer)。
可以吗? 如果可以,我该怎么办?
感谢您的帮助!
答案 0 :(得分:0)
我认为你需要factory pattern 简单的使用示例:
enum LayerType
{
Raster,
Terrain,
Vector
}
public static ABaseDynamicLayer CreateLayer(LayerType type, int id, string uri)
{
ABaseDynamicLayer layer;
switch (type)
{
case LayerType.Raster:
layer = new RasterDynamicLayer();
break;
case LayerType.Terrain:
layer = new TerrainDynamicLayer();
break;
case LayerType.Vector:
layer = new VectorDynamicLayer();
break;
default: throw new ArgumentException("Type not supported:" + type.ToString());
}
layer.LayerID = id;
layer.URIPath = uri;
return layer;
}