中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
C#入門教程
 
2006-02-28 11:29:41
  C#讀作C Sharp,作為Microsoft的下一代面向?qū)ο蟮恼Z言,能夠讓開發(fā)人員在.NET平臺上快速地建立大量的應(yīng)用程序。按照Microsoft給出的定義,C#是一種源自于C和C++的,簡單的、現(xiàn)代的、面向?qū)ο蟮暮皖愋桶踩某绦蛟O(shè)計語言。C#為程序員提供了開發(fā)飛速發(fā)展的Web應(yīng)用程序所需要的強(qiáng)大而靈活的功能。與C++相比,C#將更容易被人們理解和接受,未來大量.NET平臺的應(yīng)用將由C#開發(fā),C#將是未來開發(fā)企業(yè)級分布式應(yīng)用程序的首選。
    一、C#的特點
    C#就是這樣一種編程語言,它使程序員能快速地為新一代Microsoft .NET平臺開發(fā)出應(yīng)用程序。具體來說,微軟的C#具有如下特點:
    1.快速應(yīng)用開發(fā)(RAD)功能
    支持快速開發(fā)(Rapid application development,RAD)可以說是目前開發(fā)語言最為重要的一大功能,支持快速開發(fā)可以使得開發(fā)人員的開發(fā)效率倍增,從而使得他們可以從繁重的重復(fù)性勞動中解放出來。
    C#的RAD功能主要表現(xiàn)在垃圾收集、指代等特性上。垃圾收集機(jī)制將減輕開發(fā)人員對內(nèi)存的管理負(fù)擔(dān),而指代功能更是可以讓開發(fā)者不經(jīng)過內(nèi)部類就調(diào)用函數(shù)。利用C#的這些功能,可以使開發(fā)者通過較少的代碼來實現(xiàn)更強(qiáng)大的應(yīng)用程序,并且能夠更好地避免錯誤發(fā)生,從而縮短了應(yīng)用系統(tǒng)的開發(fā)周期。
    2.語言的自由性
    用C#編寫的程序能最大程度地和任何支持.NET的語言互相交換信息。能夠繼承和使用任何語言所編寫的程序,這樣做的好處是節(jié)省了大量的工作,你不必把COBOL等語言強(qiáng)行改成另一種語言,.NET讓各種語言真正地互相交流了。
    3.強(qiáng)大的Web服務(wù)端組件
    在C#的Web編程中,最讓人興奮的是Web服務(wù)端的組件,它們不僅包括傳統(tǒng)組件,還包括那些能夠自動連接服務(wù)的可編程組件,你可以用C#編寫自己的服務(wù)器端組件,使用它們可以更自由、更容易地進(jìn)行數(shù)據(jù)綁定。
    4.支持跨平臺
    隨著互聯(lián)網(wǎng)應(yīng)用程序的應(yīng)用越來越廣,開發(fā)人員所設(shè)計的應(yīng)用程序必須具有強(qiáng)大的跨平臺性。C#編寫的應(yīng)用程序就具有強(qiáng)大的跨平臺性,這種跨平臺性也包括了C#程序的客戶端可以運行在不同類型的客戶端上,比如PDA、手機(jī)等非PC裝置。
    5.與XML的融合
    由于XML技術(shù)真正融入到了.NET之中,C#的編程變成了真正意義的網(wǎng)絡(luò)編程,甚至可以說.NET和C#是專為XML而設(shè)計,使用C#的程序員可以輕松用C#內(nèi)含的類來使用XML技術(shù)。就這方面而言,目前C#提供給了程序員裹多的自由和更好的性能來使用XML。
    6.對C++的繼承
    C#繼承并保留了C++強(qiáng)大的功妮,例如, C#保留了類型安全的檢測和重載功能,C#還提供了一些新功能取代了一些原來的ANSI C預(yù)處理程序的功能,提高了語言的類型安全等安全性。
    二、簡單應(yīng)用程序舉例與分析
    在全面、系統(tǒng)地學(xué)習(xí)以前,我們先來看一個C#的經(jīng)典程序“Welcome”。
    1.Welcome程序
    第一個程序總是很簡單的,我們讓用戶通過鍵盤輸入自己的名字,然后程序會在屏幕上打印出一條歡迎信息。程序代碼如下:
    //源文件:welcome.cs
    using System;
    class Welcome
    {
    static void Main(){
    Console.WriteLine("Please enter your name:");
    //要求用戶輸入姓名;
    Console.ReadLine();//讀取用戶輸入;
    Console.WriteLine("Welcome to you!");
    /*本行代碼用于打印歡迎信息;
    你可以在這里添加自己的代碼;
    程序結(jié)束*/
    }
    }
    上面的代碼你可以在任意一種字處理軟件中進(jìn)行編寫,然后以文件名“Welcome.cs”存盤。典型的C#源文件都是以“.cs”作為文件的擴(kuò)展名的。
    注意:C#語言是大小寫敏感的。
    2.代碼分析
    (1)名字空間
    using System表示導(dǎo)入名字空間。如果你熟悉C或者C++編程,那么你一定經(jīng)常使用“#include”之類的語句來導(dǎo)入其他C或者C++源文件。C#的含義與此類似,用于導(dǎo)入預(yù)定的元素。“System”就是一個名字空間,“using”指令允許對屬于該名字空間成員的類型無限制引用。
    (2)類和類的方法
    在程序第二行,class Welcome聲明了一個類,類的名字叫做“Welcome”。這個程序讓我們所作的事情都依靠它來完成。
    Static void Main()表示類“Welcome”中的一個方法,方法總是為我們完成某項工作的。在C#中,程序的執(zhí)行總是從“main()”方法開始,一個程序中不允許出現(xiàn)兩個或者兩個以上的“main()”方法。
    就像一個文件夾可以容納多個文件一樣,一個名字空間可以被視為某些類的一個容器。因為.NET有很多類,所以名字空間是必要的。微軟已經(jīng)編寫了數(shù)以千計的基類,同吮任何合理的大型應(yīng)用程序都可以定義更多的類。通過把類放入名字空間可以把相關(guān)的類組織起來,并且可以避免命名沖突。
    (3)“{”和“}”
    與C和C++一樣,源代碼被包含在一對大括號之中,每一個右括號總是和它前面離它最近的一個左括號相配套。如果左括號和右括號沒有全部的配套,那么這就是一個錯誤的程序。所有語句都以分號“;”結(jié)束。
    (4)程序的輸入與輸出
    程序所完成的輸入輸出功能都是通過“Console”來完成的,“Console”是在名字空間“System”中已經(jīng)定義好的一個類,你根本不需要管它是怎么完成工作的,只要直接使用它就可以了。
    上面的程序代碼中,類“Console”為我們展現(xiàn)了兩個最基本的方法:ReadLine和WriteLine。Console.ReadLine表示接受輸入設(shè)備輸入,Console.WriteLine用于在輸出設(shè)備中輸出。
    3.運行程序
    (1)執(zhí)行代碼
    理解了源程序中每一條代碼的具體含義后,下一步我們要做的就是讓這個程序真正能夠運行。
    如果你的計算機(jī)上安裝了Visual Studio .NET,則可以在集成開發(fā)環(huán)境(Integrated Developer Environment,IDE)中直接編譯并執(zhí)行源文件。如果你不具備這個條件,那么安裝Microsoft .NET Framework SDK也是可以的。實際上,.NET平臺內(nèi)置了C#的編譯器。下面讓我們使用微軟提供的命令行編譯器來對上面的程序進(jìn)行編譯。
    啟動一個命令提示符,輸入一行命令:
    csc welcome.cs
    此時,Welcome.cs文件將被編譯并運行,屏幕上會出現(xiàn)一行字符,提示你輸入姓名:
    Please enter your name:
    輸入任意安符并回來確認(rèn),屏幕是將打印出歡迎信息:
    Welcome to you!
    在C#中,編譯器只執(zhí)行編譯過程,而在C或者C++中要經(jīng)過編譯和鏈接兩個階段。也就是說,C#源文件并不被編譯成目標(biāo)文件(.obj),而是直接生成可執(zhí)行文件(.exe)或動態(tài)鏈接庫(.dll)。C#編譯器中不需要包含鏈接器。
    (2)命令行編譯器選項
    我們可以靈活地使用.NET平臺提供的命令行編譯器的不同選項,選擇不同的編譯方式。
    例如,我們希望對源文件進(jìn)行編譯,生成一個名為MyWelcome.exe的可執(zhí)行文件,我們可以采用下面的命令:
    csc/out MyWelcome.exe Welcome.cs
    有如不同的命令參數(shù)一樣,不同的命令行編譯器選項會影響我們編譯執(zhí)行的結(jié)果,如果不知道各個選項的具體含義,你可以通過編譯器幫助來獲得:
    csc/?
    4.添加注釋
    C#中注釋的方式和C、C++沒有什么區(qū)別,每行中雙斜杠“//”后面的內(nèi)容,以及在分割符“/*”和“*/”之間的內(nèi)容都將被編譯器忽略。其中,“//”表示進(jìn)行單行注釋;“/*”和“*/”表示多行注釋。
    三、C#語言基礎(chǔ)
    (一)數(shù)據(jù)類型
    應(yīng)用程序總是要處理數(shù)據(jù)的,我們必須要讓計算機(jī)了解需要處理什么樣的數(shù)據(jù),用什么方式進(jìn)行處理,按什么格式保存數(shù)據(jù)等。這就需要了解程序設(shè)計語言的數(shù)據(jù)類型。
    1.值類型
    在學(xué)習(xí)各種類型以前,我們先提一下變量的概念,變量即是存儲信息的基本單元,另一方面,我們也可以把變量理解為計算機(jī)內(nèi)存中的一個存儲空間。C#的值類型可以分為:簡單類型、結(jié)構(gòu)類型、枚舉類型。
    簡單類型是直接由一系列元素構(gòu)成的數(shù)據(jù)類型。C#中為我們提供了一組已定義的簡單類型。這些簡單類型可分為:整數(shù)類型、布爾類型、字符類型和實數(shù)類型。
    (1)整數(shù)類型
    整數(shù)類型的變量的值為整數(shù)。C#中有九種整數(shù)類型:短字節(jié)型(sbyte)、字節(jié)型(byte)、短整型(short)、無符號短整型(ushort)、整型(int)、無符號整型(uint)、長整型(long)、無符號長整型(ulong)。這些整型類型在數(shù)學(xué)上的表示以及在計算機(jī)中的取值范圍如下表所示。

    (2)布爾類型
    布爾類型是用來表示一個事件或狀態(tài)的“真”和“假”。我們知道,不管任何數(shù)據(jù),在計算機(jī)的內(nèi)部都是采用二進(jìn)制方式處理和存儲。布爾類型表示的邏輯變量只有兩種取值:“真”或“假”,在C#中分別采用“true”和“false”表示。
    (3)實數(shù)類型
    浮點類型:數(shù)學(xué)中的實數(shù)不僅包括整數(shù),而且包括小數(shù)。小數(shù)在C#中采用單精度(float)和雙精度(double)。它們的差別在于取值范圍和精度不同。
    單精度:取值范圍在±1.5*10-34到3.4*1038之間,精度為7位數(shù)。
    雙精度:取值范圍在±5.0*10-324到1.7*10308之間,精度為15到16位數(shù)。
    十進(jìn)制類型(decimal):是C#專門為我們定義的一種數(shù)據(jù)類型,主要用于方便我們在金融和貨幣方面的計算。C#通過提供這種專門的數(shù)據(jù)類型,使我們能夠更快捷地設(shè)計這方面的應(yīng)用程序。其取值范圍從大約1.0*10-28到7.9*1028 的28到29位有效數(shù)字。
    當(dāng)定義一個十進(jìn)制變量并賦值給它時,使用m下標(biāo)以表明它是一個十進(jìn)制類型。如果省略了m下標(biāo),在變量被賦值之前,它將被編譯器當(dāng)作雙精度數(shù)據(jù)類型來處理。下面是一個合法的賦值:
    decimal d_value=1.0m;
    (4)字符類型
    除了數(shù)字以外,計算機(jī)還需要處理的信息主要就是字符了。字符包括數(shù)字字符、英文字符、表達(dá)符號等,C#提供的字符類型采用了國際公認(rèn)的Unicode字符集標(biāo)準(zhǔn)。一個Unicode的標(biāo)準(zhǔn)字符長度為16位,用它可以表示大多數(shù)的字符類型了。可以按下面的方法給一個字符變量賦值,如:
    char c=′A′;
    另外,我們還可以直接通過十六進(jìn)制轉(zhuǎn)義符(前綴\x)或Unicode表示法給字符型變量賦值)(前綴\u),用來在程序中指代特殊的控制字符。
    (5)結(jié)構(gòu)類型
    在具體的程序設(shè)計中我們經(jīng)常要把一組相關(guān)的信息存放在一起。把一系列相關(guān)的變量組織成為一個單一實體的過程,稱為生成結(jié)構(gòu)的過程。這個單一實體的類型我們就叫做結(jié)構(gòu)類型,每一個變量稱為結(jié)構(gòu)的成員。結(jié)構(gòu)類型的變量采用struct來進(jìn)行聲明。下面的程序代碼說明定義一個通訊錄記錄結(jié)構(gòu)(包括姓名、電話和地址)的定義。
    Struct PhoneBook{
    public string name;
    public string phone;
    public string address;
    }
    PhoneBook p1;
    p1就是一個通訊錄(PhoneBook)結(jié)構(gòu)類型的變量。上面聲明中的“public”表示對結(jié)構(gòu)類型的成員的訪問權(quán)限。對結(jié)構(gòu)成員的訪問通過結(jié)構(gòu)變量名加上訪問符“.”號,后跟成員的名稱:
    p1.name=″tom″;
    結(jié)構(gòu)類型包含的成員類型沒有限制,可以相同也可不同。
    (6)枚舉類型
    枚舉(enum)實際上是為一組在邏輯上密不可分的整數(shù)值提供便于記憶的符號。下面的程序代碼聲明了一個代表星期的枚舉類型的變量。
    Enum WeekDay{
    Sunday,Monday,Tuesday,Wednesday,Friday,Saturday
    };
    WeekDay day;
    注意:枚舉類型的變量在某一時刻只能取枚舉中某一個元素的值。如,day這個表示“星期”的枚舉的變量,它的值要么是Sunday,要么是Monday或其他的星期元素,但它在一個時刻只能代表具體的某一天,不能既是星期二,又是星期三。
    Day=Tuseday;
    按照系統(tǒng)默認(rèn),枚舉中的每個元素都是整型(int),且第一個元素刪去的值為0,它后面的每一個連續(xù)的元素的值按加1遞增。在枚舉中,也可以給元素直接賦值。下面的程序代碼把星期一的值設(shè)為1,其后的元素的值分別為2,3……
    enum WeekDay{
    Sunday=1,Monday,Tuesday,Wednesday,Friday,Saturday
    };
    為枚舉類型的元素所賦值的值的類型限于long、int、short和byte等整數(shù)類型。
    2.引用類型
    在這里,引用的含義是該類型的變量不直接存儲所包含的值,而是指向它所要存儲的值。即引用類型存儲實際數(shù)據(jù)的引用值的地址。C#中的引用類型有四種:類、代表、數(shù)組和接口。
    (1)類
    類是面向?qū)ο缶幊痰幕締挝?,是一種包含數(shù)據(jù)成員、函數(shù)成員和嵌套類型的數(shù)據(jù)結(jié)構(gòu)。類的數(shù)據(jù)成員有常量、域和事件。函數(shù)成員包括方法、屬性、索引指示器、運算符等。類和結(jié)構(gòu)同樣都包含了自己的成員,但它們之間最主要的區(qū)別在于:類是引用類型,而結(jié)構(gòu)是值類型。
    類支持繼承機(jī)制,通過繼承,派生類可以擴(kuò)展基類的數(shù)據(jù)成員和函數(shù)成員,進(jìn)而達(dá)到代碼重用和設(shè)計重用的目的。下面介紹兩個經(jīng)常用到的類:
    object類:它是所有其他類型的基類,C#中的所有類型都直接或是間接地從object類中繼承。因此,對一個object的變量可以賦予任何類型的值。
    Int x=25;
    object obj1;
    obj1=x;
    object obj2=′A′;
    對object類型的變量聲明采用object關(guān)鍵字,這個關(guān)鍵字是在.NET平臺中為我們提供的預(yù)定義的名字空間System中定義的,是類System.Object的別名。
    String類:專門用于對字符串的操作。同樣,這個類也是在.NET平臺中為我們提供的預(yù)定義的名字空間System中定義的,是類System.String的別名。
    字符串在實際中應(yīng)用非常的廣泛,在類的定義中封裝了許多內(nèi)部的操作,我們只要簡單地加以利用就可以了??梢杂眉犹?#8220;+”合并兩個字符串,采用下標(biāo)從字符串中獲取字符等。
    String String1=″Welcome″;
    string String2=″Welcome″+″everyone″;
    char c=String1[0];
    bool b=(String1==String2);
    (2)代表
    在C#中取消了C和C++中的指針的這個概念。而代表實際上相當(dāng)于是C#中的函數(shù)指針原型,與指針不同的是,代表在C#中是類型安全的。
    在聲明代表時,只需要指定代表指向的原型的類型,它不能有返回值,也不能帶有輸出類型的參數(shù)。如我們可以聲明一個指向int類型函數(shù)原型的代表:
    delegate int MyDelegate();
    如果我們聲明了自己的一個代表,那么它就是對系統(tǒng)定義的類System.deldgate的一個擴(kuò)展。
    (3)數(shù)組
    在進(jìn)行批量處理數(shù)據(jù)的時候,我們要用到數(shù)組。數(shù)組是一組類型相同的有序數(shù)據(jù)。數(shù)組按照數(shù)組名、數(shù)據(jù)元素的類型和維數(shù)來進(jìn)行描述。C#中提供Ststem.Array類是所有數(shù)組類型的基類。
    數(shù)組的聲明格式為:
    non-array-type[dim-separators] array-instance name;
    比如我們聲明一個整數(shù)數(shù)組:
    int[]arr;
    在定義數(shù)組時,可以預(yù)先指定數(shù)組元素的個數(shù),這時在“[]”中定義數(shù)組的元素個數(shù),它的個數(shù)可以通過數(shù)組名加圓點加“Length”獲得。而在使用數(shù)組時,可以在“[]”中加入下標(biāo)來取得對應(yīng)的數(shù)組元素。C#中的數(shù)組元素的下標(biāo)是從0開始的,以后遞增。
    在C#中數(shù)組可以是一維的也可以是多維的,同樣也支持矩陣和參差不齊的數(shù)組。其中一維數(shù)組最為普遍,用得也最多。
    Class Tese
    {
    static void Main(){ //可動態(tài)生成數(shù)組的長度
    string[] a1; //一維數(shù)組string
    string[] a2; //二維數(shù)組string
    string[] a3; //三維數(shù)組string
    }
    }
    (4)接口
    接口定義了一個協(xié)議(conrtact)。一個類或結(jié)構(gòu)要實現(xiàn)接口就必須堅持這種協(xié)議。接口可以包括方法、屬性、索引和事件作為成員。下面的程序代碼說明了一個接口,它包含一個索引、一個事件E、一個方法F和一個屬性P。
    Interface Iexampie
    {
    string this[int index]{get; ste;}\
    event EventHandler E;
    void F(int value);
    string P{get; set;}
    }
(4)foreach語句
    foreach語句是在C#中新引入的。它表示收集一個集合中的各元素,并針對各個元素執(zhí)行內(nèi)嵌語句。其格式為:
    foreach(type identifier in expression)embedded-statement
    其中類型(type)和標(biāo)識符(identifier)用來聲明循環(huán)變量,表達(dá)式(expression)對應(yīng)集合。每執(zhí)行一次內(nèi)嵌語句,循環(huán)變量就依次取集合中的一個元素代入其中。在這里,循環(huán)變量只是一個只讀型局部變量,如果試圖改變它的值或?qū)⑺鳛橐粋€ref或out類型的參數(shù)傳遞時,都將引發(fā)編譯出錯。
    Foreach語句中的expression必須是集合類型,如果該集合的元素類型與循環(huán)變量類型不一樣,則必須有一個顯示定義的從集合中的元素類型到循環(huán)變量元素類型的顯示轉(zhuǎn)換。
    下面的程序代碼說明用一個foreach語句來循環(huán)顯示列表中的元素。
    Using System;
    using System.Collections;
    class Tese
    {
    static void WriteList(Arraylist list){
    foreach(object o in list)
    Console.WriteLine(o);
    }
    static void Main(){
    ArrayList list=new ArrayList();
    for(int I=0; I<10; I++)
    list.Add(I);
    WriteList(list);
    }
    }
    3.轉(zhuǎn)子語句
    (1)break語句和continue語句
    break語句用來退出最近的switch、while、do、for、foreach語句的循環(huán),而continue語句用來開始一個新的while、do、for和foreach語句的循環(huán)。
    (2)標(biāo)簽聲明和goto聲明
    標(biāo)簽聲明可以交替聲明,goto聲明可以把控制傳送到標(biāo)簽聲明。
    (3)return語句
    return語句返回對語句中的成員控制。無表達(dá)式的return語句只能在無返回值的成員中應(yīng)用。帶表達(dá)式的return語句只能在返回表達(dá)式的函數(shù)成員中運用。
    (4)throw語句與try語句
    throw語句用來拋出異常。Try語句提供一個在程序塊執(zhí)行過程中捕獲異常的機(jī)制。此外,try語句還提供當(dāng)try語句脫離控制時總是要執(zhí)行的代碼塊。
    (五)異常處理
    程序中對異常的處理能使你的程序更加強(qiáng)壯。現(xiàn)在的許多程序設(shè)計語言都增加了異常處理的能力,C#也不例外。
    1.異常處理語句
    C#中的異常處理語句有三種形式:try-catch 捕捉異常、try-finally 清除異常、try-catch-finally 處理所有異常。
    下面的一段代碼處理溢出異常:
    try{
    for(;n<=max;n++)
    sum*=n;
    }
    catch(OverfolwException oe)
    {
    Console.WriteLine(“溢出“);
    return;
    }
    2.清除異常
    try-finally 結(jié)構(gòu)將清除異常。看下面的代碼:
    try{
    for(;n<=max;n++)
    sum*=n;
    }
    finally
    {
    Console.WriteLine(“溢出“);
    return;
    }
    上面的代碼中finally 子句中的代碼在任何情況下總會被執(zhí)行,即使沒有異常發(fā)生。
    3.處理所有異常
    try-catch-finally 處理所有的異常。如下面的代碼:
    try{
    for(;n<=max;n++)
    sum*=n;
    }
    catch(OverfolwException oe)
    {
    Console.WriteLine(“溢出“);
    return;
    }
    catch(Exception e)
    {
    //捕捉所有異常
    }
    finally
    {
    }
    4.拋出異常
    程序中我們可以先拋出異常,然后進(jìn)行捕捉。
    拋出異常的語法如下:
    throw new Exception()
    四、一個簡單的客戶應(yīng)用程序
    有了上面的基礎(chǔ),通過下面的實例可以輕松掌握如何創(chuàng)建組件和一個簡單的客戶應(yīng)用程序。
    1.構(gòu)建組件
    首先在文本編器中編寫源代碼,以下是兩個文件add.cs,mult.cs的程序代碼。
    //add.cs
    using System;
    public class AddClass
    {
    public static long Add(long I,long j)
    {
    return(I+j);
    }
    }
   
    //mult.cs
    using System;
    public class MultiplyClass
    {
    public static long Multiply(long x,long y)
    {
    return(x*y);
    }
    }
    以上代碼定義了兩個類AddClass和MultipyClass,并分別構(gòu)造了兩個方法Add()和Multiply()。
    2.編譯組件
    csc/target:library/out:MyLibrary.dll Add.cs Mult.cs
    通過csc把Add.cs和Mult.cs兩個文件編譯成類型庫MyLibrary.dll。
    3.客戶應(yīng)用程序調(diào)用
    客戶應(yīng)用程序調(diào)用組件的方法如下:
    //MyClient.cs
    using System;
    class MyClient
    {
    public static void Main(string[ ] args)
    {
    Console.WriteLine("Calling methods from MyLibrary.dll:");
    if (args.Length !=2)
    {
    Console.WriteLine("Usage:MyClient ");
    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);
    Console.WriteLine("The sum of {0} and {1} is {2}",num1,num2,sum);
    Console.WriteLine("The product of {0} and {1} is {2}",num1,num2,product);
    }
    }
    在編譯客戶應(yīng)用程序時,引用了上面編譯好的新組件庫MyLibrary.dll,然后運行MyClient.exe文件得到結(jié)果。
    Csc/out:MyClient.exe/reference:MyLibrary.dll MyClient.cs
    4.執(zhí)行結(jié)果
    在命令行輸入:
    >MyClient 2 3 (回車)
    5.輸出結(jié)果
    Calling methods from MyLibrary.dll:
    The sum of 2 and 3 is 5
    The product of 2 and 3 is 6
    以上的組件并沒有使用名字空間,如果構(gòu)建組件的文件中添加了名字空間的語句,如下:
    using System;
    namespace MyMethods
    {
    public class …
    {
    public static long …(long I, long j)
    {
    …
    }
    }
    }
    那么,在客戶應(yīng)用程序中將使用引導(dǎo)名字空間的語句,這樣程序才會根據(jù)名字空間的方向找到應(yīng)用的類和方法。例如:
    //MyClient.cs
    using System;
    using MyMethods;
    class MyClient
    {
    …
    }
    以上名字空間的好處在于一個空間定義多個類或是名字空間再包括其他名字空間,這樣可以降低編譯程序的出錯率。
   
    五、一個GUI例子
    該例子中有一個文本框,兩個按鈕,單擊“點擊我”的按鈕在文本框中顯示“你好,電腦報”。單擊“終結(jié)者”的按鈕結(jié)束程序。
    Using System;
    using System.Drawing;
    using System.Collections;
    using System.ComponentModel;
    using System.Windows.Forms;
    using System.Data;
   
    namespace WindowsApplication1
    {
    ///
    /// Summary description for Form1.
    ///

    public class Form1 : System.Windows.Forms.Form
    {
    private System.Windows.Forms.TextBox textBox1;
    private System.Windows.Forms.Button button1;
    private System.Windows.Forms.Button button2;
    ///
    /// Required designer variable.
    ///

    private System.ComponentModel.Container components = null;
   
    public Form1()
    {
    //
    // Required for Windows Form Designer support
    //
    InitializeComponent(); //初始化窗體及子控件
   
    //
    // TODO: Add any constructor code after InitializeComponent call
    //
    }
   
    ///
    /// Clean up any resources being used.
    ///

    protected override void Dispose( bool disposing ) //釋放對組件的引用,以便垃
    { //圾回收器回收無用的內(nèi)存
    if( disposing )
    {
    if (components != null)
    {
    components.Dispose();
    }
    }
    base.Dispose( disposing );
    }
   
    #region Windows Form Designer generated code
    ///
    /// Required method for Designer support - do not modify
    /// the contents of this method with the code editor.
    ///

    private void InitializeComponent()
    {
    this.textBox1 = new System.Windows.Forms.TextBox();
    this.button1 = new System.Windows.Forms.Button();
    this.button2 = new System.Windows.Forms.Button();
    this.SuspendLayout();
    //
    // textBox1
    //
    this.textBox1.Location = new System.Drawing.Point(74, 64);
    this.textBox1.Name = "textBox1";
    this.textBox1.Size = new System.Drawing.Size(144, 21);
    this.textBox1.TabIndex = 0;
    this.textBox1.Text = "C#酷嗎?";
    //
    // button1
    //
    this.button1.Location = new System.Drawing.Point(58, 160);
    this.button1.Name = "button1";
    this.button1.Size = new System.Drawing.Size(72, 24);
    this.button1.TabIndex = 1;
    this.button1.Text = "點擊我";
    this.button1.Click += new System.EventHandler(this.button1OnClick);
    //
    // button2
    //
    this.button2.Location = new System.Drawing.Point(162, 160);
    this.button2.Name = "button2";
    this.button2.Size = new System.Drawing.Size(72, 24);
    this.button2.TabIndex = 2;
    this.button2.Text = "終結(jié)者";
    this.button2.Click += new System.EventHandler(this.button2OnClick);
    //
    // Form1
    //
    this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
    this.ClientSize = new System.Drawing.Size(292, 273);
    this.Controls.AddRange(new System.Windows.Forms.Control[] {
    this.button2,
    this.button1,
    this.textBox1});
    this.Name = "Form1";
    this.Text = "我愛C#";
    this.ResumeLayout(false);
   
    }
    #endregion
   
    ///
    /// The main entry point for the application.
    ///

    [STAThread]
    static void Main()
    {
    Application.Run(new Form1()); //啟動程序
    }
    //響應(yīng)單擊按鈕“點擊我”的button1OnClick事件
    private void button1OnClick(object sender, System.EventArgs e)
    {
    textBox1.Text="你好!電腦報";
    //
    }
   
    //響應(yīng)單擊按鈕“終結(jié)者”的button2OnClick事件
    private void button2OnClick(object sender, System.EventArgs e)
    {
    Application.Exit(); //退出應(yīng)用程序
    }
    }
    }
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
C#基礎(chǔ)知識
VB.NET和VB6.0有什么區(qū)別(轉(zhuǎn)) - dlbird的博客 - 博客園
C# 中的異常捕捉(try)和異常處理(catch)
C#安裝和基礎(chǔ)學(xué)習(xí)
C#反射教程(2)--Asp.Net/C#/WCF--編程設(shè)計網(wǎng)
C# 3.0 特性預(yù)覽
更多類似文章 >>
生活服務(wù)
熱點新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服