【问题标题】:Looking for a design pattern in C# for strongly typed list在 C# 中寻找强类型列表的设计模式
【发布时间】:2010-08-16 04:22:47
【问题描述】:

我正在为强类型数据库键列表建模。有些是整数,有些是字符串,有些是 guid 等。

编辑它们是强类型的,因为一些键将包含整数值、一些字符串、一些 uid 等。

因此,如果我的 Key 类是“Key”并且我的列表是 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;
    }
}

【问题讨论】:

  • 我怀疑泛型 are 在这里是正确的解决方案,但您还没有显示您想对列表做什么。您是否尝试列出相同类型的行键或可能不同键类型的列表?
  • 这个“强类型”如何?你是怎么用钥匙的?
  • 他们的想法是它们可能是不同的键类型但属于同一类型(因此它们可以共享共同的行为,只是类型不同)。我回避泛型的原因是我读到不同类型的列表不适合泛型
  • 我觉得我的问题有点含糊。我正在回答这个问题stackoverflow.com/questions/353126/…

标签: c# design-patterns


【解决方案1】:

为什么您认为泛型在这里不合适?它们几乎是为这种场景发明的:

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

拥有一个返回object 的抽象基类会破坏强类型的整个想法,不是吗?

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

【讨论】:

  • 我同意返回一种破坏强类型的对象。但是,如果我想要一个 RowKeys 列表,它们是否都必须是同一类型,例如我不能在同一个列表中混合 RowKey 和 RowKey
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-25
相关资源
最近更新 更多