[英]Inheriting a List<> in c# and overriding the constructor
我正在嘗試圍繞List創建一個包裝器,以執行一些我想做的特定事情,例如計算最大最小值,從某些元素中提取特定值等。
我開始
public struct datum {
public UInt32[] chan;
public UInt64 sample_number;
public UInt32 time;
public UInt32 source_sector;
}
public class dataSet : List<datum> {
bool dirty=true;
....
}
這些方法通常是這樣的(我想知道列表是否已被修改,因為我有一個max()/ min()函數,該函數僅在數據被修改后才解析數據,並在列表沒有被緩存時緩存值以供重用已修改)
public new void Add(datum x ) {
base.Add(x);
this.dirty = true;
}
但是,我不確定如何創建構造函數。 此語法不起作用..如何獲得這種類型的行為?
public dataSet(int count) {
this = (dataSet) new List<datum>(count);
}
我也有這個構造函數,盡管未經測試,它似乎可以正常工作(沒有編譯錯誤)
public dataSet(List<datum> data) {
this.AddRange(data);
}
我碰到過一篇帖子,說您應該使用Collection,而List是為了提高速度。 盡管我需要速度,但是我不確定為什么Collection會更好?
-更新-
我不想使用linq,因為您無法創建可以同時高效地計算max / min的東西:
public void recalculateMaxMin() {
foreach (var d in data) {
for (int i = 0; i < 16; i++) {
if (d.chan[i] > max[i]) max[i] = d.chan[i];
if (d.chan[i] < min[i]) min[i] = d.chan[i];
}
}
}
n
我正在嘗試圍繞List創建一個包裝器,以執行一些我想做的特定事情,例如計算最大最小值,從某些元素中提取特定值等。
別。 只需使用LINQ to Objects。 那就是它的設計目的 :
var list = new List<int> { 10, 20, 30 };
var average = list.Average();
var max = list.Max();
// etc
通常,我建議無論如何不要從List<T>
派生-這不是它的設計目的。 但是,如果必須的話,只需將一個構造函數鏈接到一個基本構造函數即可:
public dataSet(int count) : base(count)
{
// Add in any extra code you want to here. Probably none in this case.
// It would execute *after* the base constructor call.
}
有關構造函數鏈接的更多信息,請參見我關於構造函數的文章 。
(我也強烈建議您更改名稱dataSet
不符合.NET命名約定,而DataSet
對大多數.NET開發人員而言完全意味着其他 。)
您永遠都無法在C#中將"this"
設置為某些內容。 我認為您正在尋找:
public dataSet(int count)
: base(count)
{ }
但是,我認為您應該看看"System.Linq"
命名空間。 我認為您要實施的工作已經由Microsoft完成。 Linq中已經實現了“選擇”,“加入”,“位置”和許多其他子句。 您也可以使用"INotifyCollectionChanged"
接口實現臟東西。
以下是一些參考:
如果您確實需要實現具有新行為的完整List類,則實現"System.Collections.Generic.IList"
接口是唯一可以使您的想法更高級,更完美的方法。 它比從List類繼承並嘗試更改您無權訪問的所有內容更具可定制性。
希望能幫助到你
干杯
public dataSet(int count)
: base(count) {
}
您可以使用base()
調用基本類型的構造函數
public dataSet(int count) : base(count)
{
// no need to implement anything here. base(count) will call the base
// type's constructor
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.