最近因為專案告一段落,在網路上看看有什麼新文章時,發現了一些新的作法,原文是英文,在此只是簡單做個記錄,與用自己的方式記錄幾個方法,有興趣看詳情的請參考原文....
參考文章:Implementing the Singleton Pattern in C#
Singleton 顧名思義就是在一個專案中,只能允許一個實體,不管被建立幾次,都是同一個實體。
最近因為專案告一段落,在網路上看看有什麼新文章時,發現了一些新的作法,原文是英文,在此只是簡單做個記錄,與用自己的方式記錄幾個方法,有興趣看詳情的請參考原文....
參考文章:Implementing the Singleton Pattern in C#
Singleton 顧名思義就是在一個專案中,只能允許一個實體,不管被建立幾次,都是同一個實體。
最近實作了一個列舉的 Flag 來處理權限的機制,也在無意之間發現了 .NET 4.0 多了一個 HasFlag 這個 Function ,這倒是節省了很多寫 code 的程式與判斷。
如下的權限身分:
public enum SystemRoles { None = 0, // 0000 0000 0000 0000 0x0000 ReportUser = 1 << 0, // 0000 0000 0000 0001 0x0001 WebUser = 1 << 1, // 0000 0000 0000 0010 0x0002 ACCUser = 1 << 6, // 0000 0000 0100 0000 0x0040 HRUser = 1 << 7, // 0000 0000 1000 0000 0x0080 ReadyOnlyAdmin = 1 << 8, // 0000 0001 0000 0000 0x0100 ACCAdmin = 1 << 10, // 0000 0100 0000 0000 0x0400 HRAdmin = 1 << 11, // 0000 1000 0000 0000 0x0800 SystemAdmin = 1 << 14, // 0100 0000 0000 0000 0x4000 ITAdmin = 1 << 15, // 1000 0000 0000 0000 0x8000 }
如下面的情況,早期要得到 hasFlag1 的值,必須使用 hasFlag2 的方式,才能得到相同的結果,在程式的判讀上也比較吃力,現在使用 HasFlag() 的 Function 變得更簡單易懂了。
SystemRoles flagEnum = SystemRoles.WebUser | SystemRoles.HRUser | SystemRoles.ReportUser; bool hasFlag1 = flagEnum.HasFlag(SystemRoles.WebUser); bool hasFlag2 = ((flagEnum & SystemRoles.WebUser) != 0) ? true : false;
最近實作了一個列舉的 Flag 來處理權限的機制,也在無意之間發現了 .NET 4.0 多了一個 HasFlag 這個 Function ,這倒是節省了很多寫 code 的程式與判斷。
如下的權限身分:
public enum SystemRoles { None = 0, // 0000 0000 0000 0000 0x0000 ReportUser = 1 << 0, // 0000 0000 0000 0001 0x0001 WebUser = 1 << 1, // 0000 0000 0000 0010 0x0002 ACCUser = 1 << 6, // 0000 0000 0100 0000 0x0040 HRUser = 1 << 7, // 0000 0000 1000 0000 0x0080 ReadyOnlyAdmin = 1 << 8, // 0000 0001 0000 0000 0x0100 ACCAdmin = 1 << 10, // 0000 0100 0000 0000 0x0400 HRAdmin = 1 << 11, // 0000 1000 0000 0000 0x0800 SystemAdmin = 1 << 14, // 0100 0000 0000 0000 0x4000 ITAdmin = 1 << 15, // 1000 0000 0000 0000 0x8000 }
如下面的情況,早期要得到 hasFlag1 的值,必須使用 hasFlag2 的方式,才能得到相同的結果,在程式的判讀上也比較吃力,現在使用 HasFlag() 的 Function 變得更簡單易懂了。
SystemRoles flagEnum = SystemRoles.WebUser | SystemRoles.HRUser | SystemRoles.ReportUser; bool hasFlag1 = flagEnum.HasFlag(SystemRoles.WebUser); bool hasFlag2 = ((flagEnum & SystemRoles.WebUser) != 0) ? true : false;
Generics 是在 C# 2.0 時所新增加的類型,再 2.0 時就已經感受到他的好處了,最近把之前寫的程式又拿出來看時,就想說把改成 3.0 的格式好了,再著手進行的過程中,更感受到 C# 3.0 的強大的功能。讓以前要寫很多行來表示的敘述,通通變成一行就搞定了,以下就簡單的做個筆記,以免我自己忘記。(因為寫的更好的...人大有人在…噗~)
為了簡單介紹,我需要一個 Class,此 Class 為 Employee:
public class Employee { public string Name { get; set; } public int ID { get; set; } public double Salary { get; set; } }
現在我們建立一個 Employee 的 List 集合
List<Employee> Employees = new List<Employee>();