2011年7月24日 星期日

建立和使用 C# DLL

HOW TO:建立和使用 C# DLL (C# 程式設計手冊)

Visual Studio 2008

更新:2007 年 11 月
一個動態連結程式庫 (DLL) 會在執行階段連結到您的應用程式。若要示範 DLL 的建立和使用方式,請參考下面案例:
  • MathLibrary.DLL:程式庫檔案,包含可在執行階段呼叫的方法。在此範例中,DLL 包含 Add 和 Multiply 這兩個方法。
  • Add.cs:包含 Add(long i, long j) 方法的原始程式檔。它會傳回其參數的總和。包含 Add 方法的 AddClass 類別是UtilityMethods 命名空間的成員。
  • Mult.cs:原始程式碼,其包含了 Multiply(long x, long y) 方法。它會傳回其參數的乘積。包含 Multiply 方法的MultiplyClass 類別是 UtilityMethods 命名空間的成員。
  • TestCode.cs:包含 Main 方法的檔案。它使用 DLL 中的方法來計算執行階段引數的總和與乘積。
// File: Add.cs 
namespace UtilityMethods
{
    public class AddClass 
    {
        public static long Add(long i, long j) 
        { 
            return (i + j);
        }
    }
}


// File: Mult.cs
namespace UtilityMethods 
{
    public class MultiplyClass
    {
        public static long Multiply(long x, long y) 
        {
            return (x * y); 
        }
    }
}


// File: TestCode.cs

using UtilityMethods;

class TestCode
{
    static void Main(string[] args) 
    {
        System.Console.WriteLine("Calling methods from MathLibrary.DLL:");

        if (args.Length != 2)
        {
            System.Console.WriteLine("Usage: TestCode  ");
            return;
        }

        long num1 = long.Parse(args[0]);
        long num2 = long.Parse(args[1]);

        long sum = AddClass.Add(num1, num2);
        long product = MultiplyClass.Multiply(num1, num2);

        System.Console.WriteLine("{0} + {1} = {2}", num1, num2, sum);
        System.Console.WriteLine("{0} * {1} = {2}", num1, num2, product);
    }
}
/* Output (assuming 1234 and 5678 are entered as command line args):
    Calling methods from MathLibrary.DLL:
    1234 + 5678 = 6912
    1234 * 5678 = 7006652        
*/


這個檔案包含了使用 Add 和 Multiply 等 DLL 方法的演算法。首先,它會剖析從命令列輸入的引數 num1 和 num2,然後再使用 AddClass 類別中的 Add 方法計算總和,並使用 MultiplyClass 類別上的 Multiply 方法計算乘積。
請注意,檔案開頭的 using 指示詞可以讓您使用名稱不符的類別名稱,在編譯時期參考 DLL 方法,如下所示:
MultiplyClass.Multiply(num1, num2);


否則,您必須使用完整名稱,如下所示:
UtilityMethods.MultiplyClass.Multiply(num1, num2);


執行

若要執行此程式,請輸入 EXE 檔的名稱,接著輸入兩個數目,如下所示:
TestCode 1234 5678
若要建立 MathLibrary.DLL 檔案,請使用下列命令列編譯 Add.cs 和 Mult.cs 兩個檔案:
csc /target:library /out:MathLibrary.DLL Add.cs Mult.cs
此處的 /target:library 編譯器選項會通知編譯器輸出一個 DLL,而不要輸出一個 EXE 檔案。後面接續著一個檔案名稱的/out 編譯器選項則是用來指定該 DLL 的檔案名稱。否則編譯器會使用第一個檔案 (Add.cs) 當成 DLL 的名稱。
若要建立可執行檔 TestCode.exe,請使用下列命令列:
csc /out:TestCode.exe /reference:MathLibrary.DLL TestCode.cs
此處的 /out 編譯器選項會通知編譯器輸出一個 EXE 檔案,並指定輸出檔案的名稱 (TestCode.exe)。這個編譯器選項是選擇性的。此處的 /reference 編譯器選項會指定此程式所使用的 DLL 檔案。

Object 類別 (方法)

Object 類別

 Object 方法

 Equals 方法

 Finalize 方法

 GetHashCode 方法

 GetType 方法

 MemberwiseClone 方法

 ReferenceEquals 方法

 ToString 方法

Object 方法

.NET Framework 3.5

更新:2007 年 11 月
Object 型別會公開下列成員。
 名稱說明
ek57cbk7.pubmethod(zh-tw,VS.90).gif ek57cbk7.static(zh-tw,VS.90).gif ek57cbk7.CFW(zh-tw,VS.90).gif ek57cbk7.xna(zh-tw,VS.90).gifEquals多載。 判斷兩個 Object 執行個體是否相等。
ek57cbk7.protmethod(zh-tw,VS.90).gif ek57cbk7.CFW(zh-tw,VS.90).gif ek57cbk7.xna(zh-tw,VS.90).gifFinalize在記憶體回收 (GC) 回收 Object 前,允許 Object 嘗試釋放資源並執行其他清除作業。
ek57cbk7.pubmethod(zh-tw,VS.90).gif ek57cbk7.CFW(zh-tw,VS.90).gif ek57cbk7.xna(zh-tw,VS.90).gifGetHashCode做為特定型別的雜湊函式。
ek57cbk7.pubmethod(zh-tw,VS.90).gif ek57cbk7.CFW(zh-tw,VS.90).gif ek57cbk7.xna(zh-tw,VS.90).gifGetType取得目前執行個體的 Type
ek57cbk7.protmethod(zh-tw,VS.90).gif ek57cbk7.CFW(zh-tw,VS.90).gif ek57cbk7.xna(zh-tw,VS.90).gifMemberwiseClone建立目前 Object 的淺層複本 (Shallow Copy)。
ek57cbk7.pubmethod(zh-tw,VS.90).gif ek57cbk7.static(zh-tw,VS.90).gif ek57cbk7.CFW(zh-tw,VS.90).gif ek57cbk7.xna(zh-tw,VS.90).gifReferenceEquals判斷指定的 Object 執行個體是否為相同的執行個體。
ek57cbk7.pubmethod(zh-tw,VS.90).gif ek57cbk7.CFW(zh-tw,VS.90).gif ek57cbk7.xna(zh-tw,VS.90).gifToString傳回 String,表示目前的 Object


Button 類別 介紹

System.Web.UI.WebControls
 Text="Sort Ascending" (按鈕文字)
 CommandName="Sort" (自訂觸發名稱)
 CommandArgument="Ascending" (值)
 OnCommand="CommandBtn_Click"  (自訂按鈕Click事件 或 直接內建Click)
 (自訂Click方法)(void CommandBtn_Click(Object sender, CommandEventArgs e) {})
runat="server"/>



  說明:按一下 Button 控制項時,是否執行驗證
  說明:取得或設定選擇性 (Optional) 參數
  說明:取得或設定與 Button 控制項關聯的命令名稱,這個命令名稱將傳遞至 Command 事件
  說明:取得或設定當 Button 控制項的 Click 事件引發時執行的用戶端指令碼
  說明:取得或設定當按下 Button 控制項時,從目前的網頁要張貼到之目的地網頁的 URL(網址導向)
  說明:取得或設定顯示於 Button 控制項中的文字標題
  說明:預設 [ true ], 如果您指定 false,ASP.NET 網頁架構會將用戶端指令
     碼加入至網頁,以將表單張貼到伺服器上。
  說明:Button 所控制的控制項群組,會在回傳至伺服器時,針對這個群組引發驗證,預設為空字串 ("")。