在實際業務中用一個簡單泛型,以及父子類的轉換
阿新 • • 發佈:2019-01-02
這幾天回去看了下之前的專案原始碼,發現極為粗製濫造,CRUD成了習慣後,技術很容易停滯不前,大部分時間用在了CV上,程式碼複製過來就用,也不加一改動、抽象、封裝下。
這裡舉一個小例子。
有三個業務功能,材料計劃,材料申請,採購計劃。都有工作流參與,需要記錄每一步中材料的數量和變化。共有屬性:材料名稱,材料數量,材料價格,之前的做法就是直接CV幾個函式,分別對應每個計劃的處理。其實認真分析後,可以發現大部分屬性是共有的,設計如下。(筆記本沒裝PDM,用EXCEL畫了)
,明細表,記錄每一步的原始資料,,變動表,記錄每一步的資料變化,需要和上一步的對比。
1 這裡先列出明細的基類和材料計劃的子類
1 public class TBL_Detail 2 { 3 public TBL_Detail() 4 { 5 } 6 7 public string Id { get; set; } 8 public string CLID { get; set; } 9 public string Name { get; set; } 10 public decimal Num { get; set; } 11 publicView Codestring Price{ get; set; } 12 public string Step { get; set; } 13 public string JHID { get; set; } 14 15 }
1 public class TBL_Detail_CLJH : TBL_Detail 2 { 3 public TBL_Detail_CLJH() 4 { 5 } 6 7 //可新增實際的屬性 8 }
2 定義一個方法,用於將子類轉換為父類。
1 public static List<TBL_Detail> getDetailFromChild<T>(List<T> list) where T : TBL_Detail 2 { 3 List<TBL_Detail> list_detail = new List<TBL_Detail>(); 4 foreach (T item in list) 5 { 6 list_detail.Add((TBL_Detail)item); 7 } 8 return list_detail; 9 }View Code
這裡泛型表示引數型別限制為 派生自明細表基類(TBL_Detail)的子類,迴圈中將子類裝箱為父類。
除錯程式碼:
1 static void Main(string[] args) 2 { 3 List<TBL_Detail_CLJH> list1 = new List<TBL_Detail_CLJH>(); 4 TBL_Detail_CLJH oned = new TBL_Detail_CLJH(); 5 for (int i = 0; i < 3; i++) 6 { 7 oned = new TBL_Detail_CLJH(); 8 oned.Id = "Id" + i; 9 oned.Name = "Name" + i; 10 list1.Add(oned); 11 } 12 13 List<TBL_Detail> list = getDetailFromChild(list1); 14 Console.WriteLine("型別1"); 15 Test(list); 16 Console.Read(); 17 }View Code
3,加入TBL_Change變化表的處理,這裡擴充套件下泛型引數的方法,讓它可以支援多個泛型引數就可以了。
1 public static List<TBL_Detail> getDetailFromChild<T,U>(List<T> list, List<U> list_change) 2 where T : TBL_Detail 3 where U : TBL_Change 4 { 5 List<TBL_Detail> list_detail = new List<TBL_Detail>(); 6 foreach (T item in list) 7 { 8 list_detail.Add((TBL_Detail)item); 9 } 10 return list_detail; 11 }View Code
如果還要加引數,在<T,U>裡邊繼續新增即可,別忘了新增約束。