2010-08-15 63 views
2

我正在建模一个强类型数据库键列表。有些人会整型,某些字符串,一些的GUID等在C#中寻找强类型列表的设计模式

EDIT他们在这个意义上强类型,一些按键将包含整数值,一些字符串,一些的UID等

所以,如果我上课关键是“关键”,我的名单是List<Key>我正在寻找如何实现强类型的方面。我不想使用泛型,因为我认为它不适用于此(虽然证明我错了)。

我正在考虑制作“Key”和抽象类,并使每个子类实现强类型的方面。但是这也会很麻烦。 (见下文)

有没有人有更好的想法?

public abstract class RowKey 
{ 
    public string DbName { get; set; } 

    public abstract object GetTypedValue(); 
} 

public class IntegerRowKey: RowKey 
{ 
    public override object GetTypedValue() 
    { 
     return 1; 
    } 
} 
+2

我怀疑泛型*在这里是正确的解决方案,但是你没有向列表显示你想要做什么。您是否想要拥有*相同*类型的rowkey或潜在*不同*键类型的列表? – 2010-08-15 20:13:17

+0

这是“强类型”?你怎么使用钥匙? – SLaks 2010-08-15 20:13:37

+0

这个想法是,他们可能是不同的关键类型,但类型相同(所以他们可以分享共同的行为,它只是不同的类型)。 我之所以回避泛型的原因是因为我读过不同类型的列表并不适合泛型 – AJM 2010-08-15 20:15:46

回答

2

为什么你认为仿制药在这里不合适?他们几乎对于这种情况发明了

public class RowKey<T> 
{ 
    public string DbName { get; set; } 
    public T GetValue(): 
} 
// Now use RowKey<int>, RowKey<string>, RowKey<Guid>, etc. 

有一个抽象基类,返回object种破坏被强类型的整体思路,不是吗?

编辑:啊,我明白你的意思了。看看this question.

+0

我同意返回一种类型的对象破坏强打字。但是,如果我想要获得RowKeys的列表,他们是不是都必须具有相同的类型我无法在同一个列表中混合RowKey 和RowKey AJM 2010-08-15 20:18:53

+0

@AJM:请参阅编辑。 :) – tzaman 2010-08-15 20:23:01