1. 程式人生 > >在實際業務中用一個簡單泛型,以及父子類的轉換

在實際業務中用一個簡單泛型,以及父子類的轉換

這幾天回去看了下之前的專案原始碼,發現極為粗製濫造,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         public
string Price{ get; set; } 12 public string Step { get; set; } 13 public string JHID { get; set; } 14 15 }
View Code
1 public class TBL_Detail_CLJH : TBL_Detail
2     {
3         public TBL_Detail_CLJH()
4         {
5         }
6 
7         //可新增實際的屬性
8     }
View Code

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>裡邊繼續新增即可,別忘了新增約束。