Maison développement back-end Tutoriel C#.Net SUNWEN教程之----C#进阶(五)

SUNWEN教程之----C#进阶(五)

Dec 19, 2016 am 10:20 AM

我现在要说的是库(libraries),和大家一起学习如何用C#建立一个DLL文件.说起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,明白了吧,呵呵.


Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Article chaud

Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Article chaud

Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Active Directory avec C# Active Directory avec C# Sep 03, 2024 pm 03:33 PM

Active Directory avec C#

Modificateurs d'accès en C# Modificateurs d'accès en C# Sep 03, 2024 pm 03:24 PM

Modificateurs d'accès en C#

Générateur de nombres aléatoires en C# Générateur de nombres aléatoires en C# Sep 03, 2024 pm 03:34 PM

Générateur de nombres aléatoires en C#

Vue Grille de données C# Vue Grille de données C# Sep 03, 2024 pm 03:32 PM

Vue Grille de données C#

Modèles en C# Modèles en C# Sep 03, 2024 pm 03:33 PM

Modèles en C#

Lecteur de chaînes C# Lecteur de chaînes C# Sep 03, 2024 pm 03:23 PM

Lecteur de chaînes C#

Écrivain de chaînes C# Écrivain de chaînes C# Sep 03, 2024 pm 03:23 PM

Écrivain de chaînes C#

BinaryWriter en C# BinaryWriter en C# Sep 03, 2024 pm 03:22 PM

BinaryWriter en C#

See all articles