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