原创 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