1、 bool and Boolean different
a)、bool是Boolean的別名. bool是C#中的,Boolean是.net Framework中的
System.Boolean 是 .NET 類(lèi)庫(kù)中的一個(gè)類(lèi)(確切地說(shuō)是結(jié)構(gòu),struct),是 .NET 各語(yǔ)言通用的。值類(lèi)型是放在堆棧中(stack),而引用類(lèi)型是放在堆(heap)中,堆(heap)里的東西是動(dòng)態(tài)生成,所以會(huì)比放在堆棧(stack)中慢。
值類(lèi)型與引用類(lèi)型的簡(jiǎn)介:
1、 值類(lèi)型主要由兩類(lèi)組成
A)、結(jié)構(gòu) b)、枚舉
A)結(jié)構(gòu)包括 數(shù)值類(lèi)型(整型、浮點(diǎn)型、decimal)、bool型、用戶定義結(jié)構(gòu)
基于值類(lèi)型的變量直接包含值。將一個(gè)值類(lèi)型變量賦給另一個(gè)值類(lèi)型變量時(shí),將復(fù)制包含的值。這與引用類(lèi)型變量的賦值不同,引用類(lèi)型變量的賦值只復(fù)制對(duì)對(duì)象的引用,而不復(fù)制對(duì)象本身。與引用類(lèi)型不同,從值類(lèi)型不可能派生出新的類(lèi)型。但與引用類(lèi)型相同的是,結(jié)構(gòu)也可以實(shí)現(xiàn)接口。與引用類(lèi)型不同,值類(lèi)型不可能包含 null 值。然而,可空類(lèi)型功能允許將 null 賦給值類(lèi)型。 每種值類(lèi)型均有一個(gè)隱式的默認(rèn)構(gòu)造函數(shù)來(lái)初始化該類(lèi)型的默認(rèn)值。
B)、enum 關(guān)鍵字用于聲明枚舉,即一種由一組稱(chēng)為枚舉數(shù)列表的命名常數(shù)組成的獨(dú)特類(lèi)型enum Days {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};//在此枚舉中,強(qiáng)制元素序列從 1 而不是 0 開(kāi)始
2、引用類(lèi)型:引用類(lèi)型的變量又稱(chēng)為對(duì)象,可存儲(chǔ)對(duì)實(shí)際數(shù)據(jù)的引用。有class,interface and delegate(封裝命名方法或匿名方法,委托類(lèi)似于 C++ 中的函數(shù)指針;但是,委托是類(lèi)型安全和可靠的)
3、指針類(lèi)型:指針類(lèi)型不繼承
object,并且指針類(lèi)型與 object 之間不存在轉(zhuǎn)換。此外,裝箱和取消裝箱不支持指針。但是,允許在不同指針類(lèi)型之間以及指針類(lèi)型與整型之間進(jìn)行轉(zhuǎn)換。當(dāng)在同一個(gè)聲明中聲明多個(gè)指針時(shí),* 僅與基礎(chǔ)類(lèi)型一起使用,而不是作為每個(gè)指針名稱(chēng)的前綴。如:int* p1,p2,p3;//OK int *p1,*p2,*p3;//Invalidate in C# 指針類(lèi)型 僅在unsafe模式下可用。
內(nèi)置 C# 類(lèi)型的關(guān)鍵字,這些類(lèi)型是
System 命名空間中的預(yù)定義類(lèi)型的別名
C# 類(lèi)型
.NET Framework 類(lèi)型
boolSystem.Boolean
byteSystem.Byte
sbyteSystem.SByte
charSystem.Char
decimalSystem.Decimal
doubleSystem.Double
floatSystem.Single
intSystem.Int32
uintSystem.UInt32
longSystem.Int64
ulongSystem.UInt64
objectSystem.Object
shortSystem.Int16
ushortSystem.UInt16
stringSystem.String
除了 object 和 string 外,表中的所有類(lèi)型均稱(chēng)為簡(jiǎn)單類(lèi)型。
字符串格式化:
C 或 c
貨幣
Console.Write("{0:C}", 2.5);
Console.Write("{0:C}", -2.5);
$2.50
($2.50)
D 或 d
十進(jìn)制數(shù)
Console.Write("{0:D5}", 25);
00025
E 或 e
科學(xué)型
Console.Write("{0:E}", 250000);
2.500000E+005
F 或 f
固定點(diǎn)
Console.Write("{0:F2}", 25);
Console.Write("{0:F0}", 25);
25.00
25
G 或 g
常規(guī)
Console.Write("{0:G}", 2.5);
2.5
N 或 n
數(shù)字
Console.Write("{0:N}", 2500000);
2,500,000.00
X 或 x
十六進(jìn)制
Console.Write("{0:X}", 250);
Console.Write("{0:X}", 0xffff);
FA
FFFF
二、修飾符
命名空間、(namespace),enum,interface 都不允許使用訪問(wèn)修飾符,沒(méi)有訪問(wèn)限制。
并且 enum and interface 成員的訪問(wèn)限制默認(rèn)為public,而class and struct的訪問(wèn)限制默認(rèn)為private。在struct的訪問(wèn)限制里只有public ,private ,internal三種訪問(wèn)限制。
1、 訪問(wèn)限制修飾符:public ,private,protected,internal,protected internal(網(wǎng)上查找,重載與重寫(xiě)的區(qū)別是???)
A)、public 訪問(wèn)不受限制
B)、protected 訪問(wèn)僅限于包含類(lèi)或從包含類(lèi)派生的類(lèi)型
C)、internal 訪問(wèn)僅限于當(dāng)前程序集
D)、protected internal 訪問(wèn)僅限于從包含類(lèi)派生的當(dāng)前程序集或類(lèi)型
E)、private 訪問(wèn)僅限于包含類(lèi)型
F)、abstract可以和類(lèi)、方法、屬性、索引器及事件一起使用。在類(lèi)聲明中使用 abstract 修飾符以指示某個(gè)類(lèi)只能是其他類(lèi)的基類(lèi) 。Remark: 抽象類(lèi)不能實(shí)例化。抽象類(lèi)的用途是提供多個(gè)派生類(lèi)可共享的基類(lèi)的公共定義,抽象類(lèi)的成員方法同其派生類(lèi)實(shí)現(xiàn),在抽象類(lèi)只提供定義,如:
public abstract void DoWork(int i);//抽象方法沒(méi)有實(shí)現(xiàn),不是常規(guī)的方法塊,所以后面用分號(hào)。
public class D
{
public virtual void DoWork(int i)
{
// Original implementation.
}
}
public abstract class E : D
{
public abstract override void DoWork(int i);
}
public class F : E
{
public override void DoWork(int i)
{
// New implementation.
}
}//如果將虛方法聲明為抽象方法,則它對(duì)于從抽象類(lèi)繼承的所有類(lèi)而言仍然是虛的。繼承抽象方法的類(lèi)無(wú)法訪問(wèn)該方法的原始實(shí)現(xiàn)。在前面的示例中,類(lèi) F 上的 DoWork 無(wú)法調(diào)用類(lèi) D 上的 DoWork。在此情況下,抽象類(lèi)可以強(qiáng)制派生類(lèi)為虛方法提供新的方法實(shí)現(xiàn).
G)、密封類(lèi)sealed:密封類(lèi)不能用作基類(lèi)。因此,它也不能是抽象類(lèi)。密封類(lèi)主要用于防止派生。
H)、const (readonly的區(qū)別,誰(shuí)的效果好,在什么樣的條件下) 關(guān)鍵字用于修改字段或局部變量的聲明。它指定字段或局部變量的值是常數(shù),不能被修改。const 字段只能在該字段的聲明中初始化;readonly 字段可以在聲明或構(gòu)造函數(shù)中初始化。因此,根據(jù)所使用的構(gòu)造函數(shù),readonly 字段可能具有不同的值。另外,const 字段是編譯時(shí)常數(shù),而 readonly 字段可用于運(yùn)行時(shí)常數(shù).
I)、event、關(guān)鍵字用于指定事件,類(lèi)和結(jié)構(gòu)使用事件將出現(xiàn)的可能影響對(duì)象狀態(tài)的事件通知給對(duì)象;
public delegate void SampleEventDelegate(object sender, EventArgs e);
public class SampleEventSource
{
public event SampleEventDelegate SampleEvent;
}
J)、extern:用于聲明在外部實(shí)現(xiàn)的方法。extern 修飾符的常見(jiàn)用法是在使用 Interop 服務(wù)調(diào)入非托管代碼時(shí)與 DllImport 屬性一起使用;在這種情況下,該方法還必須聲明為 static,如下面的示例所示:
[DllImport("avifil32.dll")]
private static extern void AVIFileInit();
K)、Override(重寫(xiě)基類(lèi)相應(yīng)的目標(biāo)) : 擴(kuò)展或修改繼承的方法、屬性、索引器或事件的抽象實(shí)現(xiàn)或虛實(shí)現(xiàn)。Remark:1、不能重寫(xiě)非虛方法或靜態(tài)方法。重寫(xiě)的基方法必須是 virtual、abstract 或 override 的;2、override 聲明不能更改 virtual 方法的可訪問(wèn)性。override 方法和 virtual 方法必須具有相同的訪問(wèn)修飾符;3、不能使用修飾符 new、static、virtual 或 abstract 來(lái)修改override 方法
L)、static:聲明屬于類(lèi)型本身而不是屬于特定對(duì)象的靜態(tài)成員,不可修飾索引器、析構(gòu)函數(shù)或類(lèi)以外的類(lèi)型。
M)、unsafe:表示不安全上下文,該上下文是任何涉及指針的操作所必需的
N)、virtual 關(guān)鍵字用于修飾方法、屬性、索引器或事件聲明,并且允許在派生類(lèi)中重寫(xiě)這些對(duì)象。不能與 static、abstract 和 override 修飾符一起使用。
O)、volatile關(guān)鍵字表示字段可能被多個(gè)并發(fā)執(zhí)行線程修改,同于多個(gè)線程進(jìn)行訪問(wèn)修改,所以不用lock語(yǔ)句進(jìn)行序列化的字段。Remark: 不能將局部變量聲明為 volatile。
P)、fixed:禁止垃圾回收器重定位可移動(dòng)的變量,還可用于創(chuàng)建固定大小的緩沖區(qū)。語(yǔ)句設(shè)置指向托管變量的指針并在 statement 執(zhí)行期間“釘住”該變量。如果沒(méi)有 fixed 語(yǔ)句,則指向可移動(dòng)托管變量的指針的作用很小,因?yàn)槔厥湛赡懿豢深A(yù)知地重定位變量
Q)、lock 關(guān)鍵字將語(yǔ)句塊標(biāo)記為臨界區(qū),方法是獲取給定對(duì)象的互斥鎖,執(zhí)行語(yǔ)句,然后釋放該鎖
方法參數(shù):
A)、params: 可以指定在參數(shù)數(shù)目可變處采用參數(shù)的方法參數(shù)。在方法聲明中只允許一個(gè) params 關(guān)鍵字如:
Public static void UaseParams(params object[]){}
B)、ref and out different ,ref:關(guān)鍵字使參數(shù)按引用傳遞。其效果是,當(dāng)控制權(quán)傳遞回調(diào)用方法時(shí),在方法中對(duì)參數(shù)所做的任何更改都將反映在該變量中。若要使用 ref 參數(shù),則方法定義和調(diào)用方法都必須顯式使用 ref 關(guān)鍵字, 傳遞到 ref 參數(shù)的參數(shù)必須最先初始化. 這與 out 不同,out 的參數(shù)在傳遞之前不需要顯式初始化。
命名空間的關(guān)鍵字:
A)、namespace 關(guān)鍵字用于聲明一個(gè)范圍。此命名空間范圍允許您組織代碼并為您提供了創(chuàng)建全局唯一類(lèi)型的方法。
B)、using: 1、作為指令,用于為命名空間創(chuàng)建別名或?qū)肫渌臻g中定義的類(lèi)型。2、作為語(yǔ)句,用于定義一個(gè)范圍,在此范圍的末尾將釋放對(duì)象。
Using 作為指令時(shí)有兩個(gè)用途:
一、允許在命名空間中使用類(lèi)型,以便您不必限定在該命名空間中使用的類(lèi)型;
Using namespace;
二、為命名空間創(chuàng)建別名。
Using aligas = type|namespace;
Using 作為語(yǔ)句:定義一個(gè)范圍,將在此范圍之外釋放一個(gè)或多個(gè)對(duì)象:
using (Font font1 = new Font("Arial", 10.0f),font2 = new Font(“Arial”,12f))
using 語(yǔ)句允許程序員指定使用資源的對(duì)象應(yīng)當(dāng)何時(shí)釋放資源。為 using 語(yǔ)句提供的對(duì)象必須實(shí)現(xiàn) IDisposable 接口。此接口提供了 Dispose 方法,該方法將釋放此對(duì)象的資源
如:using (C c = new C()) ,C實(shí)現(xiàn)它自己的 Dispose 行為。注意類(lèi)型C必須從 IDisposable 繼承,所以C實(shí)現(xiàn)了IDisposable接口
運(yùn)算符關(guān)鍵字
A)、as(查找與is 之間的相同點(diǎn)與不同點(diǎn)): 用于在兼容的引用類(lèi)型之間執(zhí)行轉(zhuǎn)換, 當(dāng)轉(zhuǎn)換失敗時(shí),運(yùn)算符將產(chǎn)生空,而不是引發(fā)異常。更嚴(yán)格地說(shuō),這種形式的表達(dá)式,如:string[] str= new string[count]; String s = str[i] as string;
B)、is: 檢查對(duì)象是否與給定類(lèi)型兼容,如果所提供的表達(dá)式非空,并且所提供的對(duì)象可以強(qiáng)制轉(zhuǎn)換為所提供的類(lèi)型而不會(huì)導(dǎo)致引發(fā)異常,則 is 表達(dá)式的計(jì)算結(jié)果將是 true。如:
Object o; 類(lèi)classs1, o is class1;
C)、new:有三種用途:運(yùn)算符、修飾符、約束
D)、sizeof:用于獲取值類(lèi)型的字節(jié)大小。例如,可以如下所示檢索 int 類(lèi)型的大?。?div style="height:15px;">
System.Type type = Typeof(int);若要獲取表達(dá)式的的運(yùn)行時(shí)的類(lèi)型,可以使用.net.framework的方法GetType();如: