使用 泛型類 泛型方法 解決 動態型別 問題

2021-04-22 14:33:48 字數 1628 閱讀 3281

專案中用到乙個類,他有乙個儲存資料的屬性value,這個屬性有個比較奇怪的地方就是,他的型別,是無法預先估計的,會隨著軟體的擴充套件而變化,

也就是我們常說的動態型別。

二、分析問題    這個問題解決方法很容易就可以看出有2種:

1、使用object基類

使用這種方式能夠解決問題,但是會引起裝箱、拆箱等影響效能的低效操作,不可取;

2、使用泛型類

使用泛型類也是能夠解決問題的,但是在所有使用該物件時指出具體的型別,而這個會讓上層使用該類時因具體類不同而不好組織,也不可取;

三、解決問題

為了避免傷處麻煩,我採用了泛型類 + 泛型方法的模式來解決問題,簡單的說,就是

1、把value的型別抽象出來做成乙個類,我們稱他為dynamicvalue,這個類含有datatype來儲存value的資料型別,並提供了泛型方法getvalue和

setvalue來讀寫value的值。

2、在從dynamicvalue上,派生乙個泛型類dynamicvalue,用來實際儲存資料。

使用這個方法的好處就是,避免了使用object會產生的裝箱、拆箱動作,封裝了泛型類的具體型別變化,更加容易管理和使用了。

四、具體實現看下面的**:

///

/// 動態資料型別

///

public class dynamicvalue

///

/// 獲取值之泛型方法

///

/// 值型別

///

/// 值

///

public t getvalue()

return default(t);

}///

/// 設定值之泛型方法

///

/// 值型別

/// 待複製引數

///

/// false:設定失敗

/// true:設定成功

///

public bool setvalue(t value)

return false;}}

///

/// 動態資料型別之泛型類

///

///

public class dynamicvalue: dynamicvalue

///

/// 建構函式

///

public dynamicvalue()

: this(default(t))

///

/// 建構函式

///

///

public dynamicvalue(t value)

}五、測試**

class program

}class testvalue

public override string tostring()

}六、測試結果

型別正確,返回應有的值

12.3

型別不匹配,返回default(t),即:值型別為0,引用型別為null

型別不匹配,返回default(t),即:值型別為0,引用型別為null

0型別正確,返回應有的值

value = 0

press any key to exit..

泛型 泛型類 泛型方法 泛型擦除

1 是什麼?一種允許我們在不確定引數型別時候使用的型別。例如我不知道a方法應該會傳string還是int,我就用個泛型先佔坑。2 為什麼要用泛型?泛型可以在編譯期自動確定具體型別,檢查型別是否匹配,可以提高 的重用率,減少冗餘編碼。3 泛型與object的區別?像上面說的我不知道方法a的引數型別,其...

泛型類泛型方法

泛型定義 操作的資料型別被指定為乙個引數,將原來的具體資料資料型別引數化。泛型類 1.泛型引數必須是引用資料型別 2.不能 new t 例如可以 this.element t new object 來強制轉換 3.不能 new t 4建立例項物件時忘寫 t 預設為object 例如 myarrayl...

泛型類,泛型方法,泛型介面

泛型,就是一種不確定的資料型別。如果在類後面加上 這個類就變成了泛型類。這個 t可以使用任意的字母代替。表示定義了一種不確定的資料型別,這種不確定的資料型別必須在使用這個類 比如建立物件 的時候才能確定下來。如果希望縮小泛型的範圍,延後泛型的確定時間,讓泛型在呼叫方法的時候確定,那麼我們可以使用泛型...