三月 15

有的時候我們在寫程式時,可能在Debug,會需要使用某一段程式。

而這段程式在Release時,我們又不需要了。

比較傳統的作法就是使用人工去把該程式給註解或反註解來完成。

現在我們可以使用前置處理器指示詞來達成,

「前置處理器指示詞」用比較白話的方式來講,就是程式中的程式。

繼續閱讀... »





十二月 12

這次的Visual Studio 2012 Update 1官方似乎沒有提供離線檔(offline file)或ISO下載。

所以就只能自己來了,下載的檔案大小約1GB

繼續閱讀... »





九月 19

SHA加密有很多種版本,像是SHA1、SHA256....等

下面用一個Function來實作.NET中所有的SHA加密

using System;
using System.Security.Cryptography;
using System.Text;

namespace SystemAPI.Function.EncryptLibrary
{
    public class EncryptSHA
    {
        /// <summary>
        /// 使用SHA加密訊息
        /// </summary>
        /// <param name="sourceMessage">原始資訊</param>
        /// <param name="SHAType">SHA加密方式</param>
        /// <returns>string</returns>
        public string Encrypt(string sourceMessage, EnumSHAType SHAType)
        {
            if (string.IsNullOrEmpty(sourceMessage))
            {
                return string.Empty;
            }

            //字串先轉成byte[]
            byte[] Message = Encoding.Unicode.GetBytes(sourceMessage);
            HashAlgorithm HashImplement = null;

            //選擇要使用的SHA加密方式
            switch (SHAType)
            {
                case  EnumSHAType.SHA1:
                    HashImplement = new SHA1Managed();
                    break;
                case EnumSHAType.SHA256:
                    HashImplement = new SHA256Managed();
                    break;
                case EnumSHAType.SHA384:
                    HashImplement = new SHA384Managed();
                    break;
                case EnumSHAType.SHA512:
                    HashImplement = new SHA512Managed();
                    break;
            }

            //取Hash值
            byte[] HashValue = HashImplement.ComputeHash(Message);

            //把byte[]轉成string後,再回傳
            return BitConverter.ToString(HashValue).Replace("-","").ToLower();

        }

        public enum EnumSHAType
        { 
            SHA1,
            SHA256,
            SHA384,
            SHA512
        }
              
    }
}

.
使用方式如下:

EncryptSHA SHA = new EncryptSHA();
string EncryptString = SHA.Encrypt("12345", EncryptSHA.EnumSHAType.SHA512);




四月 08

這幾天無意間發現Oracle官方也支援Linq to Oracle了

雖然還是測試版,不過至少踏出了第一步了吶

下載的名稱為:
32-bit Oracle Data Access Components (ODAC)
for Microsoft Entity Framework and LINQ to Entities 

想嘗鮮的朋友可以先玩看看

參考資料:
Tutorial. Entity Framework, LINQ and Model-First for the Oracle Database





二月 21

繼承建構子(Constructor),這看起來既有學問又深奧的文字 

不要怕,以下我用白話文解釋一下 

把繼承建構子分解後,就是 繼承 + 建構子 

繼承,相信有物件導向概念的朋友應該都知道這2個字的意思 

建構子(Constructor),就是用來進行物件初始化的方法 

一般來說,Class B 繼承 Class A 之後就可以使用Class A所開放出來的東西 

那麼如果Class B 繼承 Class A後,想要對Class A進行初始化的動作,那就需要使用繼承建構子了 

先來看看程式吧,看程式就比較不會那麼文謅謅了。程式碼可於這邊下載(C#、VB.NET雙版本)

首先有一個最基本的Class,我們叫它Class A 

C#版本Class A 

class ClassA
{
    public ClassA()
    {
        _InitString = "123";
    }

    public ClassA(string initStr)
    {
        _InitString = initStr;
    }

    private string _InitString;
    public string InitString
    {
        get { return _InitString; }
    }

    public void ShowClassAInit()
    {
        Console.WriteLine(InitString);
        Console.WriteLine("-----------------------------");
    }
}

VB.NET版本Class A 

Class ClassA
    Public Sub New()
        _InitString = "123"
    End Sub

    Public Sub New(ByVal initStr As String)
        _InitString = initStr
    End Sub

    Private _InitString As String
    Public ReadOnly Property InitString() As String
        Get
            Return _InitString
        End Get
    End Property

    Public Sub ShowClassAInit()
        Console.WriteLine(InitString)
        Console.WriteLine("-----------------------------")
    End Sub
End Class

接下來我們需要Class B來繼承Class A 

注意到了嗎,繼承建構子的實作方式就是於Class B加入一個與Class A一樣的初始建構子

並使用base(C#語法)、MyBase.New(VB.NET語法)把初始值帶入Class A。成功於Class B內,進行初始化Class A的動作 

C#版本Class B 

class ClassB : ClassA
{
    public ClassB()
    {        
    }

    public ClassB(string initStr)
        : base(initStr)
    {           
    }        
}

VB.NET版本Class B 

Class ClassB
    Inherits ClassA

    Public Sub New()
    End Sub

    Public Sub New(ByVal initStr As String)
        MyBase.New(initStr)
    End Sub

End Class

接下來就看看怎麼使用,跟使用的結果吧
下面使用Console來DemoC#版本Console 

 

class Program
{
    static void Main(string[] args)
    {
        ClassA CA1 = new ClassA();
        Console.WriteLine("new ClassA()");
        CA1.ShowClassAInit(); //Result:123 

        ClassA CA2 = new ClassA("Init AAA");
        Console.WriteLine("new ClassA(\"Init AAA\")");
        CA2.ShowClassAInit(); //Result:Init AAA 

        ClassB CB1 = new ClassB();
        Console.WriteLine("new ClassB()");
        CB1.ShowClassAInit(); //Result:123 

        ClassB CB2 = new ClassB("Init BBB");
        Console.WriteLine("new ClassB(\"Init BBB\")");
        CB2.ShowClassAInit(); //Result:Init BBB 

        Console.ReadLine();
    }
} 

  

VB.NET版本Console 

 

Module Module1 

    Sub Main()
        Dim CA1 As New ClassA()
        Console.WriteLine("new ClassA()")
        CA1.ShowClassAInit()  'Result:123 

        Dim CA2 As New ClassA("Init AAA")
        Console.WriteLine("new ClassA(""Init AAA"")")
        CA2.ShowClassAInit()  'Result:Init AAA 

        Dim CB1 As New ClassB
        Console.WriteLine("new ClassB()")
        CB1.ShowClassAInit()  'Result:123 

        Dim CB2 As New ClassB("Init BBB")
        Console.WriteLine("new ClassB(""Init BBB"")")
        CB2.ShowClassAInit()  'Result:Init BBB 

        Console.ReadLine() 

    End Sub 

End Module 

執行結果如下圖
20110221_1

以上程式碼可於這邊下載(C#、VB.NET雙版本)