久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

C#基礎(chǔ)知識(shí)

 仰望//45度微笑 2012-04-09

1       C#基礎(chǔ)知識(shí)

1.1     簡介

C#是一門純面向?qū)ο蟮男抡Z言,這門語言是專為.NET這個(gè)平臺(tái)開發(fā)的,。它不僅是語言,,也是.NET平臺(tái)不可缺少的組成部份。C#提高了安全性,,同時(shí)還支持組件對象模型(COM)和基于Windows的API,。C#還允許有限制的使用本機(jī)指針。

本章主要探討C#中的基本編程構(gòu)造和基本數(shù)據(jù)類型,,簡單說說裝箱和取消裝箱的概念,,最后講下怎樣編寫和編譯簡單的C#程序。

1.2     C#程序的基本流程

請研究下面的示例1,這是一個(gè)使用C#編寫的“Hello World”程序,,運(yùn)行后將會(huì)在屏幕上顯示出“Hello World”?,F(xiàn)在我們來分析這個(gè)程序。

示例1:

/*這是我的第一個(gè)C#程序*/

using System;

class myFirst

{

public static void Main()

{

Console.WriteLine(“Hello World”);

}

}

第一行:此行為注釋,,注釋以“/*”開頭,,以“*/”結(jié)尾。注釋可以包含多個(gè)行,。

第二行:using System;些行與C/C++中的#include語句非常相似,。在這里using是導(dǎo)入指令,System是命名空間,。我們可以將命名空間視為一組類,,System類是所有類的基類,包含大多數(shù)應(yīng)用程序與操作系統(tǒng)進(jìn)行交第操作時(shí)所需要用到的類,。請注意C#每條語句后都有一個(gè)“;”號(hào),。C#中的所有代碼行都必須以分號(hào)結(jié)尾。

第三行:class myFirst中的class是關(guān)鍵字,,代表我們定義了一個(gè)類,,這個(gè)類的名字叫做myFirst?;菊Z法class<name>{},,“{”與“}”之間為類的作用域,為了養(yǎng)成良好的編程習(xí)慣,,在定義類以后就跟上{},,以免忘記。

第五行:public static void Main()函數(shù)是C#程序的入口點(diǎn),,我們也稱為主函數(shù),。即,程序開始執(zhí)行后首先調(diào)用的函數(shù)是Main()函數(shù),。Public訪問修飾符代表此函數(shù)聲明為公共作用域,,因此可以從程序中的任何位置對它進(jìn)行訪問。static為靜態(tài)成員(稍后章節(jié)我們會(huì)對它進(jìn)行詳細(xì)的討論),void代表此函數(shù)不返回任何值,。特別注意C#是嚴(yán)格區(qū)分大小寫,。在此行代碼中所有關(guān)鍵字都使用小寫字母,只有Main()函數(shù)的首字母大寫,。例如:using與Using是完全不同的,。

第七行:這一行為主函數(shù)的內(nèi)容,我們也用{}把它們包含在這個(gè)主函數(shù)的作用域中,,Console.WriteLine(“Hello World”);調(diào)用了Console類中的WriteLine方法,并將文本“Hello World”作為參數(shù)傳遞。WriteLine函數(shù)將文本顯示在控制臺(tái)或DOS窗口中,。請注意:Console是屬于System命名空間,。如果我們沒有導(dǎo)入命名空間,即沒有寫using System;那么我們將以下列方式實(shí)現(xiàn)文本打印,。

System.Console.WriteLine(“Hello Word”);

那么我們?yōu)槭裁匆A(yù)先導(dǎo)入命名空間呢,?因?yàn)槭褂猛耆薅Q表示對象可能很乏味,而且易引發(fā)錯(cuò)誤,。為了減輕這一負(fù)擔(dān),,C#提供了using指令。一個(gè)程序中可以導(dǎo)入多個(gè)命名空間,,但必須在文件頭部指定,。

以上程序只用于幫助理解C#中的程序執(zhí)行的基本流程。本章后面的部份將更細(xì)的討論C#,。

1.3     C#中的變量聲明

C#中的變量聲明格式:

AccessModifer DataType VariableName;

AccessModifer:訪問修飾符

DataTyep:變量類型

AriableName:變量名

各修飾符的訪問級(jí)別如表1.1

表1.1:C#的訪問修飾符

訪問修飾符

描述

Public

使成員可以從任何位置訪問

Protected

使成員可以從聲明它的類及其派生類內(nèi)部訪問

private

使成員僅可以從聲明它的類內(nèi)部訪問

internal

使成員僅可以從聲明它的程序集內(nèi)部訪問

 

表1.2:C#數(shù)據(jù)類型

C#數(shù)據(jù)類型

描述

Int

聲明存儲(chǔ)整數(shù)值的變量

String

聲明存儲(chǔ)字符串值的變量,。

float

聲明存儲(chǔ)實(shí)數(shù)值(包括整數(shù)和小數(shù)部份)的變量

 

變量命名

示例2:

using System;

class Test

{

static void Main()

{

string @string()

@string=“此例中string是一個(gè)關(guān)鍵字,但在本例中作用一個(gè)變量名”;

Console.WriteLine(@string);

}

}

注意:上面的示例中聲明了一個(gè)string類型的變量,,因?yàn)閟tring是關(guān)鍵字,,所以我們在變量前加上前綴@以表示這是一個(gè)變量名。

與C#中的變量相關(guān)的另一功能是,,創(chuàng)建靜態(tài)變量,、類實(shí)例變量和數(shù)組元素時(shí),會(huì)自動(dòng)為其指定一個(gè)默認(rèn)值,。請研究下列示例:

示例3:

using System;

class Test

{

static void Main()

{

int[] array1 = new int[5];

Console.WriteLine (10 * array1[2]);

}

}

以上示例輸出為0

表1.3:數(shù)據(jù)類型及其默認(rèn)值

類型

默認(rèn)值

Numeric(int,、float、short)

0

bool

False

char

‘\0’

enum

0

引用

null

對于所有其它變量,,編譯器將引發(fā)錯(cuò)誤,。因此,在編程的時(shí)候盡量在使用變量前就為其賦值,。

1.4     C#中的基本輸入與輸出

在執(zhí)行C#的基本輸入和輸出的操作時(shí),,需要使用System命名空間的Console類的方法。

兩個(gè)最常用的方法如下所示,。

Console.WriteLine()

Console.ReadLine()

示例1中已經(jīng)使用了Console.WriteLine,。但是Console.WriteLine的功能十分強(qiáng)大,可以用它在顯示文本之前設(shè)置文本的格式,。它還帶有附加參數(shù),、占位符,指定顯示方式,。

請仔細(xì)研究下面的示例4,。

示例4:

using System;

class Teest

{

static void Main()

{

int number,result;

number=5;

result=100 * number;

Console.WriteLine(“數(shù)字100乘上{0}時(shí),,結(jié)果為{1}”,number , result);

}

}

示例輸出為:數(shù)字100乘上5時(shí),結(jié)果為500

示例5使用Console.ReadLine()

示例5:

using System

class InputStringTest

{

static void Main()

{

string input;

Console.WriteLine(“請輸入數(shù)字:”);

input=Console.ReadLine();

Console.WriteLine(“{0}”,input);

}

}

示例5中的ReadLine()方法可讀取回車符之前的所有字符,。輸入將以字符串的形式返回,。

1.5     C#中的判斷語句

C#中的條件檢查與C中相同,可以使用if結(jié)構(gòu)執(zhí)行條件分支,。請記住,,C#語法中,條件永遠(yuǎn)都是boolean值語法如下:

If(expreession)

{

//表達(dá)式的結(jié)果為true時(shí)執(zhí)行的語句

}

else

{

//表達(dá)式的結(jié)果為false時(shí)執(zhí)行的語句

}

代碼段1:

string str=”條件換算”;

if(str)

{

System.Console.WriteLine(“判斷值為True”);

}

if(str = = “條件換算”)

{

System.Console.WriteLine(“判斷值為 True”);

}

else

{

System.Console.WriteLine(“判斷值為 False”);

}

當(dāng)編譯遇到第一個(gè)if語句時(shí),,將生成下列錯(cuò)誤:

錯(cuò)誤CS0029:無法將類型“string” 隱式轉(zhuǎn)換為 “bool”

這個(gè)錯(cuò)誤的原因是第一個(gè)if語句的表達(dá)式str的計(jì)算結(jié)果不是Boolean值,。

swich結(jié)構(gòu)的語法如下:

switch(weekday)

{

case 1:

Console.WriteLine(“星期一”);

break;

case 2:

Console.WriteLine(“星期二”);

break;

case 3:

Console.WriteLine(“星期三”);

break;

default:

Console.WriteLine(“默認(rèn)星期日”);

break;

}

以上語法與C基本想同,只有一個(gè)增強(qiáng)功能,,它允許將switch結(jié)構(gòu)與字符串一起使用,。

1.6     C#中的循環(huán)結(jié)構(gòu)(也稱迭代結(jié)構(gòu))

C#提供了下列循環(huán)結(jié)構(gòu)類型。

while循環(huán)

do循環(huán)

for循環(huán)

foreach循環(huán)

除foreach循環(huán)外,,其它的所有類型都與C中的相應(yīng)類型相似,。以下為各種循環(huán)結(jié)構(gòu)的解釋。

while循環(huán)

while循環(huán)執(zhí)行一組語句,,直至指定的條件為false為止,。循環(huán)條件要求boolean條件。

語法如下:

while(condition)

{

//語句

}

可在while循環(huán)中指定break語句跳出循環(huán),。continue語句可用于跳過當(dāng)前這次循環(huán)進(jìn)入下一次循環(huán),。

do循環(huán)

do循環(huán)與while循環(huán)非常相似,不同之處是在while循環(huán)中,首先計(jì)算條件,然后執(zhí)行語句,,而在do循環(huán)中,,條件是在循環(huán)第一次結(jié)束時(shí)計(jì)算的。在do循環(huán)中,,至少要執(zhí)行一次循環(huán)才會(huì)檢查條件,。語法如下:

do

{

//語句

}while(condition)

break和continue語句也可以用在do循環(huán)中。

for循環(huán)

for循環(huán)與其它的循環(huán)區(qū)別不大,。循環(huán)變量可以作為for語句的一部份進(jìn)行聲明,。

語法如下:

for(intialization;condition;increment/decrement)

{

//語句

}

例子:

for( int i ; i <=1;i++)

{

Console.WriteLine(i);

}

變量必須是整型

foreach循環(huán)

foreach循環(huán)是C#中嫁接自VB的概念,該結(jié)構(gòu)常用于能通過集合或數(shù)組來循環(huán),。

語法如下:

foreach(Type Identifier in expression)

{

//語句

}

請仔細(xì)研究下面的示例6:

示例6:

using System;

public class ForEachLoop

{

static void Main (String [] args)

{

int index;

String [] array1=new String [3];

For (index=0;index<3;index++)

{

array1[index]=args[index];

}

foreach (String strName in array1)

{

Console.WriteLine (strName);

}

}

}

輸入?yún)?shù)one two ABC得到one two ABC

for循環(huán)通過數(shù)組args循環(huán),并將其中包含的值指定給數(shù)組array1,。然后foreach循環(huán)通過數(shù)組array1循環(huán),并將其中所包含的值一次一個(gè)的指定給變量strName,。

1.7     C#的構(gòu)造函數(shù)

構(gòu)造函數(shù)是特殊的方法,,與包含它們的類同名。創(chuàng)建類實(shí)例時(shí),,首先執(zhí)行構(gòu)造函數(shù),。下面是語法,。

class MyConstructorEx

{

public MyConstructorEx()

{

//MyConstructorEx構(gòu)造函數(shù)

}

}

C#中的析構(gòu)函數(shù)

C#中的析構(gòu)函數(shù)與構(gòu)造函數(shù)的編寫方式相同,它們與類同名,,不同之外是有一個(gè)顎化(~)符號(hào)作為前綴,。那么什么時(shí)候會(huì)執(zhí)行析構(gòu)函數(shù)呢,?在類的實(shí)例被刪除或超出程序的作用域時(shí),,將執(zhí)行析構(gòu)函數(shù)。

代碼段4:

class MyConstructorEx

{

public MyConstructorEx()

{

//MyConstructorEx構(gòu)造函數(shù)

}

public ~MyConstructorEx()

{

//~MyConstructorEx析構(gòu)函數(shù)

}

}

注意:C#中的析構(gòu)函數(shù)雖然與C++中的定義相同,,但是行為不同,,C#中它們由垃圾回收器調(diào)用。垃圾回收器是CLR(.NET運(yùn)行庫)的一種服務(wù),。

1.8     C#中數(shù)據(jù)類型的分類

C#中的數(shù)據(jù)類型分為兩個(gè)基本類別,,即值類型和引用類型。值類型表示實(shí)際數(shù)據(jù),,存儲(chǔ)在堆棧中,,而引用類型則表示指向該數(shù)據(jù)的指針或引用,存儲(chǔ)在堆上,。Int,char,結(jié)構(gòu)等都是值類型,。類、接口,、數(shù)組和字符串都是引用類型,。

Using System;

Class DataTypeTest

{

static void Main()

{

int variableVal=100;

funcTest(variableVal);

Console.WriteLine(variableVal);

}

static void funcTest(int variableVal)

{

int tempVar=10;

variableVal=tempVar * 20;

}

}

輸出結(jié)果為:100

因?yàn)樽兞縱ariableVal的值在函數(shù)funcTest()中被修改后,沒有反應(yīng)到Main()函數(shù),。出現(xiàn)這種情況是因?yàn)閕nt為值類型,,因此當(dāng)傳遞至函數(shù)funcTest()時(shí),僅傳遞一個(gè)變量的值的副本,。

示例8:

using System;

class DataTypeTest

{

public int variableVal;

}

class DataTypeTestRef

{

static void Main()

{

DataTypeTest dataTest=new DataTypeTest();

dataTest.variableVal=100;

funcDataTypeTest(dataTest);

Console.WriteLine(dataTest.variableVal);

}

static void funcDataTypeTest(DataTypeTest dataTest)

{

int tempVar=10;

dataTest.variableVal=tempVar * 20;

}

}

輸出結(jié)果:200

這是因?yàn)檫@一次傳遞至函數(shù)的參數(shù)是一個(gè)對象,。這個(gè)對象屬于引用類型,因此傳遞該對象時(shí),,傳弟的是對象的引用(也稱地址),,而不是其值的副本。所在以函數(shù)內(nèi)所做的修改會(huì)反應(yīng)到Main()函數(shù),。

表 3.4 數(shù)值數(shù)據(jù)類型和引用數(shù)據(jù)類型的常見特征

 

值類型

引用類型

變量存儲(chǔ)

實(shí)際值

引用

保存位置

內(nèi)聯(lián)(椎棧)

默認(rèn)值

Null

傳遞給函數(shù)的參數(shù)

值的副本

引用的副本

從3.4表中可以看出:

值類型的變量保存實(shí)際值,,而引用類型的變量則保存對象的地址。

值類型內(nèi)存分配在堆棧上,,而引用類型的則分配在堆上,。

前面部分中曾講到C#會(huì)為變量分配一個(gè)默認(rèn)值。值類型的默認(rèn)值為零,,而引用類型的默認(rèn)值為null引用,。

對值類型執(zhí)行“=”運(yùn)算會(huì)將值復(fù)制至目標(biāo)變量,,而引用類型執(zhí)行同一運(yùn)算則會(huì)將對像的引用復(fù)制至目標(biāo)。

1.8.1  裝箱和取消裝箱

簡單的說,,裝箱就是從值類型到引用類型的轉(zhuǎn)換,。同樣,取消裝箱便是從引用類型到值類型的轉(zhuǎn)換,。這是C#非常強(qiáng)大的一個(gè)功能,。可以讓你像簡單的操作值類型一樣操作復(fù)雜的引用類型,。這對于實(shí)現(xiàn)多態(tài)性非常重要,。

我們來研究下概念,看看代碼段5,。

代碼段5:

class BoxEx

{

int objsTaker(object objectX)

{

//objsTaker接收一個(gè)對象

//并在此處對其進(jìn)行處理

}

object objsConverter()

{

//objsConverter執(zhí)行處理過程

//并返回對象

}

}

//代碼實(shí)現(xiàn)

int variable1;

variable1=5;

boxVar.objsTaker(variable1);//第1行

int convertVar=(int)boxVar.objsConverter();//第2行

上面定義了一個(gè)包含兩個(gè)方法的類,。第一個(gè)方法objsTaker()將一個(gè)對象作為其參數(shù)。第二個(gè)方法variable1的int型值類型變量,,并賦值勤5,,創(chuàng)建了一個(gè)類BoxEx的新對象boxVar。在指定為“第一行”的行中,,調(diào)用了objsTaker()方法并將variable1作為參數(shù)傳遞,。請注意,objsTaker方法使用的一個(gè)對象作為其參數(shù),。對象是引用類型,,而程序中是將值類型的variable1作為參數(shù)傳弟。通常情況下這樣會(huì)產(chǎn)生錯(cuò)誤,,但在C#中,,值類型variable1將被隱式轉(zhuǎn)換為引用類型。這個(gè)值類型轉(zhuǎn)換為引用類型的過程(無論是隱式還是顯式)即稱為“裝箱”,。在接下來的標(biāo)記為“第2行”的行中,,創(chuàng)建了一個(gè)新的名為convertVar的int型變量,然后對該變量與objsConverter方法執(zhí)行相等運(yùn)算,。ObjsConverter()不帶參數(shù),,但返回一個(gè)對象。由于將方法int類型的值類型變量進(jìn)行了賦值運(yùn)算,,因此必須將此對象顯式地轉(zhuǎn)換為int類型(轉(zhuǎn)換是通過將所需的數(shù)據(jù)類型括到圓括號(hào)中來完成的),。這個(gè)將引用類型轉(zhuǎn)換為值類型的過程我們稱為“取消裝箱”。

特別需要注意的是,,取消裝箱需要進(jìn)行顯式的轉(zhuǎn)換,。運(yùn)行庫將執(zhí)行檢查,以確保指定值類型與引用類型中包含的類型匹配,。如果此檢查失敗,,將引發(fā)異常,,而如果該異常沒有得到妥善處理,應(yīng)用程序?qū)⒔K止,。

1.9     數(shù)據(jù)類型處理

C#提供了一個(gè)“統(tǒng)一類型系統(tǒng)”,。也就是說,C#中的所有數(shù)據(jù)類型(引用類型或值類型)都是從一個(gè)類(object類)派生而來的,。這意味著,,C#中的一切全都是對象(因?yàn)樗蓄愋投际莖bject類的派生物)。

下面我們來闡釋這一點(diǎn),。

示例9:

using System;

class ObjectProff

{

static void Main()

{

string objectVal;

objectVal=7.ToString();

Console.WriteLine(“該值現(xiàn)在是”+objectVal);

}

}

此示例輸出結(jié)果是:該值現(xiàn)在是7

請注意粗體顯示部份,,7是一個(gè)數(shù)字,如果是一個(gè)字符串,,那么我們應(yīng)該用雙引號(hào)把它引起來。這里沒引,,說明一個(gè)整型,。為何數(shù)字可以擁有方法。在C#,,一切都是對象,,即便是數(shù)字7也被認(rèn)為是對象。因此,,它可以擁有方法,,而ToString()就是方法之一。此方法是將數(shù)字7轉(zhuǎn)換為字符串值,。

C#的另一個(gè)激動(dòng)人心的功能:由于所有類型都是由共同的一個(gè)類,,object 類派生而來,因此他們具有一些相同的特征,。

1.10        C#中的靜態(tài)成員

某此情況下,,需要在類中定義這樣的成員:這些成員不與任何其他特定對象相關(guān)聯(lián)(類本身除外)。也就是說,,無論有多少該類的對象,,只會(huì)有此方法/字段的一個(gè)實(shí)例。在C#中可以使用關(guān)鍵字static定義靜態(tài)成員,,如下代碼所示:

代碼段6:

static int staticMem;

static int instanceCount()

{

        //instanceCount實(shí)現(xiàn)

}

1.11        數(shù)組

數(shù)組是一組具有類似數(shù)據(jù)類型的值,。這些值存儲(chǔ)在相鄰的內(nèi)存位置,因此訪問和操縱這些值更為簡便,。數(shù)組下標(biāo)由零開始,,C#中的數(shù)組屬于引用類型,因此存儲(chǔ)在堆中,。語法如下:

        DataTyep[number of elements] variableName;

下面的代碼段顯示了一個(gè)數(shù)組聲明示例,。

代碼段7:

int[6] array1

此示例聲明了一個(gè)名為array1的整型類型數(shù)組,該數(shù)組包含6個(gè)元素,。

代碼段8:

string[] array2;

array2 = new string[5];

該示例表明,數(shù)組中元素的個(gè)數(shù)可在程序中稍后部份指定,。

代碼段9:

string[] array3 = {“top”, “down”,“l(fā)eft”,“right” };

該示例表明,,可以在聲明階段進(jìn)行數(shù)組初始化。

1.12        結(jié)構(gòu)

可以使用類來實(shí)現(xiàn)對象,。但某些情況下,,可能需要使對象具有內(nèi)置數(shù)據(jù)類型的行為,以加快分配,,避免過多重載和引用開銷,。這個(gè)問題可以通過使用結(jié)構(gòu)來解決。結(jié)構(gòu)與類很相似,,都表示可以包含數(shù)據(jù)成員和函數(shù)成員的數(shù)據(jù)結(jié)構(gòu),。與類不同的是,結(jié)構(gòu)是值類型并且不需要堆分配,。結(jié)構(gòu)類型的變量直接包含結(jié)構(gòu)結(jié)構(gòu)的數(shù)據(jù),,而類類型的變量包含對數(shù)據(jù)的引用(該變量稱為對象)。C#的結(jié)構(gòu)內(nèi)可以定義方法,,并且還可以有一個(gè)構(gòu)造函數(shù),。

類與結(jié)構(gòu)有很多相似之處:結(jié)構(gòu)可以實(shí)現(xiàn)接口,并且可以具有與類相同的成員類型,。然而,,結(jié)構(gòu)在幾個(gè)重要方面不同于類:結(jié)構(gòu)為值類型而不是引用類型,并且結(jié)構(gòu)不支持繼承,。結(jié)構(gòu)的值存儲(chǔ)在“在堆棧上”或“內(nèi)聯(lián)”,。

下面我們來研究一下下面的代碼段:

代碼段10:

struct structEx

{

        public int structDataMember;

        public void structEx()

        {

                //構(gòu)造函數(shù)實(shí)現(xiàn)

}

public void structMethod1()

{

        //structMethod1實(shí)現(xiàn)

}

}

上面代碼段所示,名為structEr的結(jié)構(gòu)中有一個(gè)構(gòu)造函數(shù),、一個(gè)方法和一個(gè)數(shù)據(jù)成員,。結(jié)構(gòu)也有自己的局限性,它們不能像類那樣實(shí)現(xiàn)繼承,。更為重要的是,,結(jié)構(gòu)是值類型,而類則是引有類型,。在C#中,,值類型實(shí)際是屬于System命名空間的結(jié)構(gòu)。例如:long類型是System.Int64結(jié)構(gòu)的別名,。也就是說,,使用簡單類型時(shí),實(shí)際上是在使用基類中的結(jié)構(gòu)。

例如,,將 Point 定義為結(jié)構(gòu)而不是類在運(yùn)行時(shí)可以節(jié)省很多內(nèi)存空間,。下面的程序創(chuàng)建并初始化一個(gè) 100 點(diǎn)的數(shù)組。對于作為類實(shí)現(xiàn)的 Point,,出現(xiàn)了 101 個(gè)實(shí)例對象,,因?yàn)閿?shù)組需要一個(gè),它的 100 個(gè)元素每個(gè)都需要一個(gè),。

class Point

{

   public int x, y;

   public Point(int x, int y) 

{

      this.x = x;

      this.y = y;

   }

}

class Test

{

   static void Main() 

{

      Point[] points = new Point[100];

      for (int i = 0; i < 100; i++)

         points = new Point(i, i*i);

   }

}

如果將 Point 改為作為結(jié)構(gòu)實(shí)現(xiàn),,如

struct Point

{

   public int x, y;

   public Point(int x, int y) 

{

      this.x = x;

      this.y = y;

   }

}

則只出現(xiàn)一個(gè)實(shí)例對象(用于數(shù)組的對象)。Point 實(shí)例在數(shù)組中內(nèi)聯(lián)分配,。此優(yōu)化可能會(huì)被誤用,。使用結(jié)構(gòu)而不是類還會(huì)使應(yīng)用程序運(yùn)行得更慢或占用更多的內(nèi)存,因?yàn)閷⒔Y(jié)構(gòu)實(shí)例作為值參數(shù)傳遞會(huì)導(dǎo)致創(chuàng)建結(jié)構(gòu)的副本,。

1.13        枚舉類型

枚舉類型是聲明一組命名常數(shù)的獨(dú)特類型,。當(dāng)程序中某些數(shù)值可以具有一組特定值時(shí),可以使用枚舉類型,。假設(shè)需要使程序僅接受五個(gè)值,,例如:Monday、Tuesday,、Wednesday、Thursday和Friday作為Weekdays的值,。要強(qiáng)制實(shí)現(xiàn)此要求,,僅需要指定包含指定值的枚舉類型Weekdays,并編寫一個(gè)僅接受此枚舉數(shù)作為參數(shù)的方法,。下段的代碼段對此進(jìn)行了說明,。

代碼段11:

public class Holiday

{

        public enum WeekDays

        {

Monday,

Tuesday,

Wednesday,

Thursday,

Friday

}

public void GetWeekDays (String EmpName,WeekDays DayOff)

{

        //處理WeekDays

        …

}

static void Main()

{

        Holiday myHoliday = new Holiday();

        MyHoliday.GetWeekDays(“Richie”,Holiday.WeekDays.Wednesday);

}

}

與C一樣,C#中的枚舉數(shù)擁有與值關(guān)聯(lián)的數(shù)字,。默認(rèn)情況下,,向枚舉數(shù)的第一個(gè)元素賦值0,而其后各個(gè)元素的值較前一個(gè)元素的值都遞增1。不過這些值可以重寫,,并且可以在初始化階段指定其他的值,。

代碼段12:

public enum WeekDays

{

        Monday=1,

        Tuesday=2,

        Wednesday=3,

        Thursday=4,

        Friday=5

}

1.14        編譯和執(zhí)行C#程序

首先要運(yùn)行C#程序必須要有C#運(yùn)行的環(huán)境。即安裝Microsoft .NET Framework SDK v1.1或以上版本,。

csc.exe是.net用來編譯.cs文件的,,但必須要在安裝目錄下使用。 所以我們要設(shè)置一下環(huán)境變量,。 

C#環(huán)境變量設(shè)置: 

1,、在桌面右擊[我的電腦]->[屬性]->[高級(jí)]->[環(huán)境變量] 

2、在下面的系統(tǒng)變量欄點(diǎn)擊“新建” 

3、變量名輸入“csc” 

4,、變量值輸入:“C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\” (2000是C:\WINNT\Microsoft.NET\Framework\v1.1.4322\)

5,、然后在系統(tǒng)變量列表框中雙擊“Path” 

6、在變量名文本框的最后面加入 ; “%csc%” 

恩,,現(xiàn)在可以在任意目錄下調(diào)試.cs文件了,。

下面給出命令行示例

編譯 File.cs 以產(chǎn)生 File.exe: 

csc File.cs 

編譯 File.cs 以產(chǎn)生 File.dll: 

csc /target:library File.cs 

編譯 File.cs 并創(chuàng)建 My.exe: 

csc /out:My.exe File.cs 

通過使用優(yōu)化和定義 DEBUG 符號(hào),編譯當(dāng)前目錄中所有的 C# 文件,。輸出為 File2.exe: 

csc /define:DEBUG /optimize /out:File2.exe *.cs 

編譯當(dāng)前目錄中所有的 C# 文件,,以產(chǎn)生 File2.dll 的調(diào)試版本。不顯示任何徽標(biāo)和警告: 

csc /target:library /out:File2.dll /warn:0 /nologo /debug *.cs 

將當(dāng)前目錄中所有的 C# 文件編譯為 Something.xyz(一個(gè) DLL): 

csc /target:library /out:Something.xyz *.cs 

編譯 File.cs 以產(chǎn)生 File.dll: csc /target:library File.cs這個(gè)就是我們使用最多的一個(gè)命令,,其實(shí)可以簡單的寫成csc /t:library 

File.cs,,另外的一個(gè)寫法是 

csc /out:mycodebehind.dll /t:library mycodebehind.cs,這個(gè)可以自己指定輸出的文件名,。 

csc /out:mycodebehind.dll /t:library mycodebehind.cs mycodebehind2.cs,,這個(gè)的作用是把兩個(gè)cs文件裝到一個(gè).dll文件里,很有用哦,。

1.15        小結(jié)

C#變量的聲明方式如下:

AccessModifier DataType VariableName;

C#中,,通過添加前綴@符號(hào),可以將關(guān)鍵字用作變量名稱,。此@符號(hào)不是標(biāo)識(shí)符的一部份,。

在C#,靜態(tài)變量,、類實(shí)例變量和數(shù)組元素在創(chuàng)建時(shí)自動(dòng)賦值,。

選擇語句可用于根據(jù)表達(dá)式的值執(zhí)行各種操作。

C#中的swhitch語句要求為每個(gè)case塊都使用一個(gè)break語句,。

C# 允許將switch結(jié)構(gòu)與字符串一起使用,。

C# 提供了下列循環(huán)結(jié)構(gòu)類型:

while循環(huán)

do循環(huán)

for循環(huán)

foreach循環(huán)

在C#中,數(shù)據(jù)類型分為兩種基本類型,,即值類型和引用類型,。

在C#中,多數(shù)基本數(shù)據(jù)類型(如 int,、char),,包括結(jié)構(gòu)在內(nèi),為值類型,。引用類型包括類,、接口、數(shù)組和字符串,。

裝箱是指從值類型到引用類型的轉(zhuǎn)換,,而取消裝箱是指從引用類型到值類型的轉(zhuǎn)換。

C#中的所有數(shù)據(jù)類型都是從一個(gè)類即object類派生而來的。

C#結(jié)構(gòu)內(nèi)部可以定義方法,,也可以擁有構(gòu)造函數(shù),。

枚舉類型是聲明一組命名常數(shù)的獨(dú)特類型。

1.16        練習(xí)

1. C#中的標(biāo)識(shí)符可以是保留關(guān)建了,。

a.對 b.錯(cuò)

2. ___________方法用于接受用戶輸入,。

a.Console.Read b.Console.RealdLine

c.Console.WriteLine

3. 在C#中,if結(jié)構(gòu)始終要求條件的計(jì)算結(jié)果為boolean類型,。

a.對 b.錯(cuò)

4. 值類型存儲(chǔ)于____________________,。

a.堆棧 b.堆

c.隊(duì)列

5. 與C/C++不同,C#允許結(jié)構(gòu)擁有____________,。

a.僅構(gòu)造函數(shù) b.方法和構(gòu)造函數(shù)

1.17        作業(yè)

編寫C#程序,,實(shí)現(xiàn)下列目的:

1. 顯示一條消息,要求用戶輸入自己的姓名,、雇員編號(hào)和部門,。接受輸入的值并顯示在屏幕上。(提示:使用多個(gè)變量存儲(chǔ)這些值,。)

2. 修改上面的程序,,以下列方式顯示這些值。如果輸入的值為Samuel,、7576和HR,,則輸出應(yīng)為:HR部門的Samuel的雇員編號(hào)為7576。

3. 在上述程序中,,接受用戶輸入的值作為命令行參數(shù),。對命令行參數(shù)編號(hào)并將其顯示在屏幕上。

假如,,假設(shè)用戶在<Filename>中輸入:Samuel 7576 HR

則輸出應(yīng)為

1:Samuel

2:7576

3:HR

4. 在屏幕上顯示下面的項(xiàng)列表:

1. 加

2. 減

3. 乘

4. 除

接受用戶提供的三個(gè)integer值。前兩個(gè)integer值為數(shù)字,,按照用戶的選擇對其進(jìn)行數(shù)學(xué)運(yùn)算,,第三個(gè)integer值為用戶要執(zhí)行的數(shù)學(xué)運(yùn)算。此值不能小于1且不能大于4,。根據(jù)用戶的選擇(用戶提供的第三個(gè)interger值)執(zhí)行下列運(yùn)算,。

如果此值為 則執(zhí)行

加 將前兩個(gè)integer值相加,并顯示結(jié)果

減 從第一個(gè)integer值減去第二個(gè)integer值,,并顯示結(jié)果

乘 將前兩個(gè)integer值相乘,,并顯示結(jié)果

除 用第二個(gè)integer除第一個(gè)integer,并顯示結(jié)果

提示:使用switch結(jié)構(gòu)或多個(gè)if 語句

5. 編寫一個(gè)結(jié)構(gòu),,以華氏和攝氏的形式存儲(chǔ)溫度,。編寫一個(gè)函數(shù),轉(zhuǎn)換溫度表示形式,如從華氏溫度轉(zhuǎn)換為攝氏溫度,。

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請遵守用戶 評(píng)論公約

    類似文章 更多