🚫 Ad Blocker Detected

Please disable your AD blocker to continue using this site. Ads help us keep the content free! please press keyboard F5 to refresh page after disabled AD blocker

請關閉廣告攔截器以繼續使用本網站。廣告有助於我們保證內容免費。謝謝! 關閉後請按 F5 刷新頁面

0%

前言:

某些專案因為歷史久遠沒有Source Code,但有個需求需要異動裡面的程式該怎麼辦??

難道只能整個反組譯,查看程式碼翻一份做新的嗎?

不~~其實有辦法直接對於DLL進行修改

只需使用 ** Reflexil 搭配 ILSpy 或其他支援的反組譯​軟體 **

Reflexil 是一個組譯編輯器插件目前支援 ReflectorILSpy 和 Telerik’s JustDecompile

下載連結

Reflexil **Release 2.2 搭配 ILSpy version 3.2 


前置動作,安裝

Read more »

之前有介紹 (SQL Server) CTE RECURSIVE (遞迴)製作月曆 在Oracle 有提供一個精簡的語法產生階層資料 CONNECT BY

 CONNECT BY 有幾個常用Key Word.

  1. LEVEL 目前在樹節點第幾階層
  2. START WITH 設定哪筆做為起始點開始樹
  3. PRIOR 用於指定父資料欄位

製造出的階層樹,概念如下

[圖來自Oracle]

範例一

建立連續數字 1~10
<code class="language-sql">SELECT X + LEVEL
FROM (
  SELECT 0 X
  FROM DUAL
 )
CONNECT BY LEVEL <= 10

此範例使用 LEVEL CONNECT BY 上當條件 建立列值到LEVEL 大於等於 10

sqlfiddle

Read more »

前言

本篇利用RabbitMQ client來簡單實現MQ功能.

在RabbitMQ中有很重要兩個角色,ProducerConsumer,下面這個範例使用c# console來實現.

我個人覺得APMQ協議和Http協議有點類似,一樣有Header(Properties),body…等等概念.

Producer Code

一開始我們宣告一個 ConnectionFactory 並設置RabbitMQ Server連接參數

  • UserName:使用者帳號
  • Password:使用者密碼
  • HostName:連接FQDN或IP

RabbitMQ預設密碼是 guest

//建立連接工廠
ConnectionFactory factory = new ConnectionFactory
{
    UserName = "guest",
    Password = "guest",
    HostName = "localhost"
};

呼叫factory.CreateConnection 建立連接RabbitMQ連接物件,並呼叫 CreateModel方法建立一個channel Model

Read more »

前言:

如果目前場景遇到一定流程階段,但流程內容依照邏輯或情境不同也有所不一樣. 這時可以考慮使用樣板模式(TemplatePattern)

生活舉例:

因為十二年國教,所以基本上每個人都有上學的經驗

每天上學最少要經歷下面過程(我做一些簡化)

到學校=>上午上課=>吃午餐=>下午上課=>放學回家

可以看到不管是國小、國中、高中 至少都有上述的過程

但每個過程內容可能會依照年級階段不同,也有所不一樣

例如:

  • 吃中餐:高中可能是吃便當,但國小是吃營養午餐,雖然都是吃飯但內容不一樣。
  • 上午上課:都是教數學,但高中教微積分,國小教加減乘除。
Read more »

在Github這邊要先建立兩個Repository

  1. Blog Code
  2. Blog Hosting

Blog Code

這個Repository是利用Hexo cli樣板來撰寫Blog.

像我目前使用的MyBlog

建立完自己的Code Repository後.

將他clone到自己電腦上面.

執行下面幾個步驟

  1. 打開此Repository資料夾
  2. 打開CMD並進入此資料夾
  3. 利用NodeJS NPMnpm install hexo -g 就會開始下載 img
  4. 執行完第三步後再打Hexo init指令,安裝看建立Hexo將檔案.

Blog Hosting

Read more »

前文:

網路上已經有許多Blog託管平台 例如:Google Blog,痞客邦….為何我還要自己寫這篇跟大家分享?

因為上面提供的平台固然好用,但我並無法100%的去修改我想要的樣式或版面.

如果我想要有100%彈性修改我的Blog我就必須建立自己的網站.

但要給別人Hosting需要另外花一筆費用…

就有本次系列文 Github (hosting) + Hexo (Blog) + Appveyor(CICD)

這個搭配有幾個優點:

  1. 完全免費
  2. 使用MarkDown撰寫Blog就是爽.
  3. 練習使用CICD線上工具.
  4. Hexo有許多不一樣絢麗的Theme可以更換且更換方式簡單

撰寫發布流程大概如下圖

img

Read more »

前文:

在Func和Action泛型委託中 有 In , Out 兩個關鍵字

那到底是神麼意思呢?

讓我們一起看下去….

//Action delegate
public delegate void Action<in T>(T obj);

//fun delegate
public delegate TResult Func<in T, out TResult>(T arg);

上面程式碼我列出ActionFunc 委派方法各其中一個重載

我們可以發現到泛型中有關鍵字 inout 這是代表神麼意思呢?

讓我們繼續看下去…..

解說:

分享前先探討一個問題 泛型是否可以父類別指向子類別

Read more »

前文:

這個文章和大家分享解說 Func<>和Action<>

最後帶著大家來實現自己的Linq Where

先來看 Func<> ,Action<>原始定義

我們發現Func<> ,Action<> 其實本質就是委託 ,雖然有十幾個重載 但大同小異

public delegate TResult Func<out TResult>();

public delegate void Action<in T>(T obj);

Func固定最後一個泛型參數為方法回傳值,其餘是傳入參數

public delegate TResult Func<in T, out TResult>(T arg);

解說Func:

宣告一個Func<Person,string>委託 _thunkCheckAge
_thunkCheckAge委託指向CheckAge方法
執行_thunkCheckAge委託 (執行CheckAge方法)

Read more »

前文:

成為.Net高手Delegate 是必備武器之一

今天小弟和大家分享我所認知的Delegate

一開始我們先來看看Delegate到底是不是類別


範例解說:

宣告一個 voidDelegate 委託

1
2
3
4
5
6
7
8
public delegate void voidDelegate();

static void Main(string[] args)
{
Console.WriteLine($"delegate is class? {typeof(voidDelegate).IsClass}");

Console.ReadKey();
}

執行結果:Yes 委託是一個特別的類別

但委託物件方式很特別 他在宣告時必須傳入**[建構子參數]** 而建構子參數是**[方法]**

Read more »

裝飾者模式是一個很精美且優雅的模式

本篇範例 文字內容->AES加密->Zip檔附加密碼->輸出儲存

情境
有個需求要做

  • 文字內容->壓縮zip(附上密碼)->輸出儲存
    又改成…

  • 文字內容->AES加密->輸出儲存
    需求又改成….

  • 文字內容->AES加密->Zip檔附加密碼->輸出儲存

可發現需求一直在對於文字內容操作順序做變化,但他們核心離不開對於文字內容的操作

這種情境很適合來使用 [裝飾者模式]

裝飾者模式 有兩個主要角色 被裝飾物件(Decorated) & 裝飾物件(Decorator)

  1. 被裝飾物件(Decorated)就像蛋糕的一樣,
  2. 裝飾物件(Decorator)就是上的水果,奶油,巧克力…等等裝飾物品

一般先有蛋糕被裝飾物件(Decorated),後再將裝飾物品加上去裝飾物件(Decorator)

被裝飾物件(Decorated)如下圖 蛋糕的原型

Read more »