2

私はいくつかのプロジェクトを行っていますが、解決できるかどうかわからない問題に遭遇しました。だから私の問題は次のようなものです:

私のプロジェクトには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
{
}

今私のDBはそのようになります:

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 プロパティにマップします。

これは簡単ですが、必要な結果は、行のタイプが 1 (1 は RasterDynamicLayer に等しい) であるため、最初の行から RasterDynamicLayer のオブジェクトを取得することです。

それはできますか?できるとしたら、どうすればいいですか?

助けてくれてありがとう!

4

1 に答える 1

0

ファクトリパターンが必要だと思います 使用の簡単な例:

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;
}
于 2012-10-17T15:37:43.253 に答える