我正在編寫圍繞罕見數據庫驅動程序的包裝。具體來說,我正在實施原始查詢代碼,所以我自然需要儘可能多的速度。這將在大型電子商務解決方案中實施。創建一個由子項實現的抽象字段的基類
這已經讓我失去了動態類型和鑄造。我想直接訪問實際的數據類型。
我需要的功能是具有通用字段的基本參數類和一系列具有一個特定類型字段的子類(每個數據庫類型爲int,long,double,string,byte [ ],對象和列表,以及這些類型中的每一個的列表)。 C#類型應該匹配數據庫類型。
這不是直截了當的,因爲在我的實現中,調用代碼需要看基類型,但基類型看不到子字段。
這裏是我到目前爲止的代碼:
private abstract class GlobalQueryParam
{
public readonly string Low;
// Val must be correctly typed
public abstract object Val; // requires casting; don't want, but works
protected string dbVal = "";
public string GetDBVal()
{
return this.dbVal;
}
public abstract bool SetDBVal(string value);
public GlobalQueryParam(string low)
{
this.Low = low;
}
}
public class GlobalQueryParamInt : GlobalQueryParam
{
/// <summary>
/// Represents the current literal value. Used in traversal actions.
/// </summary>
public override int Val;
public int Parse(string dbVal)
{
return (this.Val = int.Parse(dbVal));
}
public override bool SetDBVal(string value)
{
if (value != "")
{
this.dbVal = value;
return int.TryParse(value, out this.Val);
}
return false;
}
public GlobalQueryParamInt(string low = "") : base(low) { }
}
在我的實現,我要聲明的基類的數組,這是在工程扔扳手。
我相信有更好的方法來做到這一點。我查看了接口,但它們也需要這種類型,並且由於共享一種通用類型的基本類型的數組,我無法使泛型生效。
如果我改變上述數組,我會介紹其他複雜性,這些複雜性本質上是循環的。
什麼是最有效的方式來實現我正在尋找,或儘可能接近它?
編輯 執行(不與泛型工作):
GlobalQueryParam[] trail = new GlobalQueryParam[dataPos+1]; // DOESN'T WORK
trail[0] = new GlobalQueryParamInt((this.TestParams[0].QueryLow - 1).ToString());
trail[1] = new GlobalQueryParamInt((this.TestParams[1].QueryLow - 1).ToString());
trail[2] = new GlobalQueryParamInt((this.TestParams[2].QueryLow - 1).ToString());
trail[3] = new GlobalQueryParamInt((this.TestParams[3].QueryLow - 1).ToString());
trail[4] = new GlobalQueryParamInt((this.TestParams[4].QueryLow - 1).ToString());
trail[5] = new GlobalQueryParamInt((this.TestParams[5].QueryLow - 1).ToString());
trail[6] = new GlobalQueryParamInt((this.TestParams[6].QueryLow - 1).ToString());
trail[7] = new GlobalQueryParamInt((this.TestParams[7].QueryLow - 1).ToString());
基類的數組有什麼問題?你關心的是「解析」方法嗎? – dumdum
基類無法在後代類中看到類型字段。所以我要麼失去訪問權(這顯然是不可行的),要麼他們都必須是相同類型並被投射。這意味着拳擊和拆箱,這是每秒鐘數百萬英鎊的巨大性能。 – IamIC
解析方法總是傳遞一個字符串,但可以輸出int,long,double,array [],List等。 – IamIC