程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> SUNWEN教程之----C#進階5

SUNWEN教程之----C#進階5

編輯:關於C語言
說起DLL,肯定是無人不知,無人不曉,這個Windows的典型代表,同時也經常是大家功擊的對象.呵呵,不管怎麼樣,學還是要學的.我們下面就開始,如何用命令行方式將一個C#程序編譯成DLL,和如何在客戶端使用他.

這個例子包括兩個文件,一個是Factorial.cs,作用是計算一個數字的階乘.還有一個是DigitCounter.cs,作用是計算傳過來的字符串參數中的數字的數目.

我們可以這樣來建立庫,在命令行方式下這樣做:
csc /target:library /out:Functions.dll Factorial.cs DigitCounter.cs

下面講一下各個參數的用法:

/target:library:向系統指出輸出的是一個DLL庫,而不是一個EXE的可執行文件.
/out:Functions.dll:指定輸出的DLL的文件名,即Functions.dll,一般地,如果你省略了第一個參數,那麼默認的文件名將是第一個文件的文件名,即Factorial.dll.

下面我們再來建立一個文件,即使用這個庫的文件,叫客戶端文件,FunctionClIEnt.cs.建立好後,用下面的語名編譯:

csc /out:FunctionTest.exe /R:Functions.DLL FunctionClIEnt.cs

下面說一下這個編譯語句的用法:

/out:FunctionTest.exe:指出輸出的文件名是FunctionTest.exe
/R:Functions.DLL:指出要引用的庫,如果不是在當前目錄下,必須要指出其的完整路徑.


下面我就把這幾個文件的代碼寫在下面:

000: // LibrarIEs\Factorial.cs
001: using System;
002:
003: namespace Functions
004: {
005:     public class Factorial
006:     {
007:         public static int Calc(int i)
008:         {
009:             return((i <= 1) ? 1 : (i * Calc(i-1)));
010:         }
011:     }
012: }
這是Factorial.cs這個文件的代碼.在003行中,namespace的意思是名字空間,據M$的介紹,庫必須根據它的名字空間打包,以使.Net能夠正確地載入你的類.

下面是DigitCounter.cs這個文件的內容:

000: // LibrarIEs\DigitCounter.cs
001: using System;
002:
003: namespace Functions
004: {
005:     public class DigitCount
006:     {
007:         public static int NumberOfDigits(string theString)
008:         {
009:             int count = 0;
010:             for ( int i = 0; i < theString.Length; i++ )
011:             {
012:                 if ( Char.IsDigit(theString[i]) )
013:                 {
014:                       count++;
015:                 }
016:             }
017:
018:             return count;
019:         }
020:     }
021: }
注意,這個例子中的namespace應與第一個的一致,因為它們是同一個庫中的.NumberOfDigits方法計算了參數中的數字的個數.

第三個文件是FunctionClIEnt.cs


我們知道,一個庫一旦建立,就可以被別的類利用(廢話,要不然怎麼叫庫呢?).下面的C#程序就利用了我們剛才建立的庫中的類.

000: // Libraries\FunctionClIEnt.cs
001: using System;
002: using Functions;
003: class FunctionClIEnt
004: {
005:     public static void Main(string[] args)
006:     {
007:         Console.WriteLine("Function ClIEnt");
008:
009:         if ( args.Length == 0 )
010:         {
011:             Console.WriteLine("Usage: FunctionTest ... ");
012:             return;
013:         }
014:
015:         for ( int i = 0; i < args.Length; i++ )
016:         {
017:             int num = Int32.Parse(args[i]);
018:             Console.WriteLine(
019:                "The Digit Count for String [{0}] is [{1}]",
020:                args[i],
021:                DigitCount.NumberOfDigits(args[i]));
022:             Console.WriteLine(
023:                "The Factorial for [{0}] is [{1}]",
024:                 num,    
025:                 Factorial.Calc(num) );
026:         }
027:     }
028: }
在002行中,一個using Functions指明了引用Functions.DLL這個類.

如果我們在命令行中鍵入如下命令,就可以看到輸出:


FunctionTest 3 5 10

輸出:

Function ClIEnt

The Digit Count for String [3] is [1]

The Factorial for [3] is [6]

The Digit Count for String [5] is [1]

The Factorial for [5] is [120]

The Digit Count for String [10] is [2]

The Factorial for [10] is [3628800]

注意:當你運行這個.EXE文件時,它引用的DLL文件可以是在當前目錄,子目錄,或是CORPATH這個環境變量.CORPATH這個環境變量是在.Net環境中的類路徑,用來指引系統尋找類.說白了,就是Java中的CLASSPATH,明白了吧,呵呵.
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved