原创 TopShelf和Quartz實現Windows Service定時任務

Net Core 控制檯應用NutGet安裝TopShelf和Quartz包 1.Job類 繼承Quartz.IJob接口,實現Excute方法 using Quartz; using System; using System.

原创 .netcore Swagger

1.新建netcore web api項目 2.安裝下列3個NuGet package 3.在startup.cs的ConfigureServices方法裏用AddSwaggerGen來添加服務 在Configure里加上Use

原创 索引器,枚舉器,迭代器,比較器

索引器實現for循環 namespace ConsoleApplication1 { class Program { static void Main(string[] args)

原创 生產者消費者模式,BlockingCollection

生產者消費者模式可以讓生產者和消費者互不干擾,且有個緩存區解。 生產者把數據放入緩衝區,而消費者從緩衝區取出數據,不必生產一個才能消費一個,消費完一個才能生產下一個。  class Program { sta

原创 反射實現IOC(控制反轉)

假設頂層Top類裏要用到A,B類的實例 。如果Top類裏直接new A,B對象,這樣耦合度高,不易維護。 我們可以用反射實現DI(依賴注入,和控制反轉是一個意思)來解耦。將A B類注入到Top類裏。 下面例子寫的比較簡單 namespa

原创 string.CompareOrdinal(效率高),checked(檢查溢出)

幾種比較方法的效率  int num = 10000000; string str1 = "abcdaefvff"; string str2 = "abcdsafs

原创 自定義特性Attribute

特性attribute就是一個類,可以應用在程序集,類,屬性,方法等元素。 在運行的時候通過反射獲取特性attribute的信息。 下面示例是對屬性做Trim標記,可以在對象層面調用一次Trim(),就將標記了Trim特性的屬性作Trim

原创 自定義類型轉換

class Program { static void Main(string[] args) { string name = "Tony"; Pe

原创 《編寫高質量代碼改善C#程序的157個建議》筆記

**重寫Equals時也應重寫GetHasgCode** 如果對象要作爲Dictionary的Key值,那麼重寫Equals時也應重寫GetHashCode。比如下列代碼,人的身份ID一樣應該就是同一個人,那麼我們期望得到的輸出是tr

原创 反射,插件接口

先創建下圖的一個窗體,插件下沒添加項目,是留給反射加載.dll插件的。在debug目錄下加一個Plugin文件夾,將插件的.dll文件放在此文件夾下可以生效。 給方案添加一個單獨的項目來寫規範插件的接口,因爲需要生成一個.dll給寫

原创 控制面板設置小數點和數字分組符合後容易引起的bug

先了解一下通過CultureInfo.CurrentUICulture和CultureInfo.InvariantCulture與控制面板設置的關係 控制面板設置如圖 public partial class Form1 :

原创 Parallel,Task

Parallel.Invoke(Run1, Run2); // 儘可能並行執行提供的每個操作。 //執行 for(在 Visual Basic 中爲 For)循環,其中可能會並行運行迭代。 Object

原创 筆記(顯示實現接口,實現IComparable,IComparer接口來排序)

顯示實現接口 如果類繼承兩個接口中有相同方法,可用顯示接口實現 class Program { static void Main(string[] args) { A

原创 筆記(線程)

Interrupt和Abort class Program { static void Main(string[] args) { Thread thread = new T

原创 窗體之間傳值(委託,事件,Owner,封裝屬性)

實現點擊Form1的send按鈕則打開Form2,並將Form1文本框的值傳給Form2。點擊Form2的OK按鈕則關閉Form2並將文本框的值傳回Form1。 點擊send打開Form2並傳值有多種方式 委託傳值 可以在new