2010-08-15 66 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