細(xì)節(jié)01給C#代碼加注釋的意義 細(xì)節(jié)02裝箱和拆箱 細(xì)節(jié)03理解值類型和引用類型 值類型變量不能為null,必須具有一個確定的值。引用類型被賦值前的值都是null 細(xì)節(jié)04隱式轉(zhuǎn)換和顯示轉(zhuǎn)換 細(xì)節(jié)05前綴方式增1和減1運算符 細(xì)節(jié)06理解移位運算符 >>運算符將第一個操作數(shù)向右移動第二個操作數(shù)所指定的位數(shù) <<運算符將第一個操作數(shù)向左移動第二個操作數(shù)所指定的位數(shù) 注意幾點: 1.如果第一個操作數(shù)為int或uint,則移位數(shù)由第二個操作數(shù)的低五位給出 2.如果第一個操作數(shù)為long或ulong,則移位數(shù)由第二個操作數(shù)的低六位給出 例如:int i; i=48>>3 則i=6 48對應(yīng)的二進(jìn)制為00110000,右移3位后的二進(jìn)制值為00000110,則十進(jìn)制為6 細(xì)節(jié)07理解運算的次序 細(xì)節(jié)08理解參數(shù)的類型 輸入?yún)?shù),輸出參數(shù)out,引用參數(shù)ref,參數(shù)數(shù)組params 細(xì)節(jié)09重載方法 細(xì)節(jié)10虛方法與重寫方法 虛方法指允許被其子類重新定義的方法,在聲明時需要用virtual修飾符 重寫也稱為覆蓋override,是在派生類使用override修飾符重寫基類中帶有virtual修飾符的虛方法 注意:override修飾符不能與new,static,或virtual修飾符同時使用 ,另外,重寫方法只能用于重寫基類中的虛方法,不能用來單獨聲明方法。 派生類中使用new關(guān)鍵字可以實現(xiàn)向基類成員隱藏繼承成員。 public class Child:Parent { public new string m() {return "隱藏一般方法"} } 細(xì)節(jié)11結(jié)構(gòu)和類的區(qū)別 細(xì)節(jié)12什么是封裝 細(xì)節(jié)13什么是繼承 細(xì)節(jié)14什么是多態(tài) 細(xì)節(jié)15作用域的概念 細(xì)節(jié)16使用索引器 索引器就是能夠讓類像一個數(shù)組似的被訪問。索引器與屬性很相似,也有g(shù)et和set訪問器。 public string this[int Ind] { get {} } shapeName=s[Count]; 細(xì)節(jié)17base和this關(guān)鍵字 base關(guān)鍵字用于派生類中訪問基類的成員。使用范圍如下: 1.調(diào)用基類中已被其他方法重寫的方法 2.指定創(chuàng)建派生類實例時應(yīng)調(diào)用的基類構(gòu)造函數(shù)。 細(xì)節(jié)18理解靜態(tài)修飾符 細(xì)節(jié)19。net的object類 System.Object類的核心成員如下: Equals():確定兩個object實例是否相等 Finalize():釋放資源并執(zhí)行其他清理操作。 GetHashCode():返回一個能夠標(biāo)識內(nèi)存中指定對象的整數(shù) GetType():獲取當(dāng)前實例的System.Type()對象 MemberwiseClone():返回當(dāng)前對象逐個成員的副本 ToString() 細(xì)節(jié)20細(xì)說可空類型 在訪問數(shù)據(jù)庫數(shù)據(jù)時可能獲得的數(shù)據(jù)為空值,這時可以考慮使用可空類型來定義字段或方法以更好的使用類來操作數(shù)據(jù)。 int?i=null; int?等價于System.Nullable<int> 細(xì)節(jié)21分部類 public partial class Person {} 開發(fā)分部類時,要成為同一類型的各個部分的所有分部類類型定義必須都在同一個程序集或者同一??熘小#?。exe或dll)中進(jìn)行定義,分部類定義不能跨越多個模塊。 細(xì)節(jié)22匿名方法 匿名方法:在事件注冊時直接將一個委托與一段代碼相關(guān)聯(lián),這種代碼就是匿名方法。 Sendbtn.Click+=delegate{"sda"};定義委托的后面要加上分號。 delegate void Msg(string str)//定義委托 public void GetMsg(string str)//定義與關(guān)聯(lián)委托匹配的方法 {Response.Write("dads");} Msg d =delegate(string str){Response.Write(str);}//委托與匿名方法的關(guān)聯(lián) Msg d= new Msg(GetMsg);//委托與命名方法關(guān)聯(lián) Sendbtn.Click+=delegate{Response.Write("safsaf");};//事件處理程序為匿名方法 細(xì)節(jié)23。net框架提供的屬性(attribute) 。net框架提供了內(nèi)置屬性,這些屬性都是從System.Attribute類派生而來的。 Conditional屬性是System.Diagnostics.ConditionalAttribute的別名,該屬性僅用于方法聲明,即僅在C#編譯器定義了作為屬性參數(shù)出現(xiàn)的符號時,他才指定方法作為類的一部分 [Conditional(“參數(shù)”)] 啟用調(diào)試狀態(tài)時才作為類的一部分可以被調(diào)用, Obsolete屬性用于定義正被替換或者不再有效的代碼。該屬性有兩個參數(shù)Message和IsError,Message用于設(shè)置錯誤信息字符串,IsError默認(rèn)為false表示在編譯代碼時發(fā)出警告信息,True表示編譯器將生成錯誤信息。 細(xì)節(jié)24自定義屬性類(Attribute) 自定義屬性類派生于System。Attribute類
自定義屬性類的特定:
1.使用AttributeUsage屬性可以限制屬性的用法。
2.在AttributeUsage屬性中可以指定是否可以多次使用屬性。
3.可以設(shè)置屬性參數(shù)。
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true)]//AttributeTargets.Class表示限制僅用于類。 AllowMultiple = true表示可以多次使用屬性 public class BookAttribute : Attribute { private string BookName; public BookAttribute(string bookname)//設(shè)置屬性參數(shù) { this.BookName = bookname; } public string Book { get { return BookName; } } } //多次使用屬性類 [Book("細(xì)說ASP.NET;")] [Book("范例手冊")] public class BookInfo { public string binfo = "圖書信息-------"; public BookInfo() { } }
protected void Page_Load(object sender, EventArgs e) { BookInfo bf = new BookInfo(); object[] Bookattr; System .Reflection .MemberInfo Typeinfo=typeof (BookInfo ); //提取類型是屬性類的成員 Bookattr = Typeinfo.GetCustomAttributes(typeof (BookAttribute ),false ); if (Bookattr.GetLength(0) != 0) { BookAttribute ba = (BookAttribute)Bookattr[0];//獲取屬性類的第一個成員 BookAttribute ba2=(BookAttribute )Bookattr [1];//獲取屬性類的第二個成員 }
} 細(xì)節(jié)25泛型 細(xì)節(jié)26包含/委托 類似適配器模式,把類中定義對象,然后自定義方法,然后在方法體中用到定義的對象中的方法。 細(xì)節(jié)27實現(xiàn)迭代器 迭代器是可以返回相同類型值的有序序列的一段代碼,可用做方法、運算符或get訪問器的代碼體??梢栽陬愔袑崿F(xiàn)多個迭代器,每個迭代器都必須像類成員一樣有唯一的名稱。并且可以再foreach語句中被客戶端代碼調(diào)用。迭代器的返回類型必須為IEnumerable或IEnumerator中任意一種,也可以是實現(xiàn)這兩個接口的類。 IEnumerable接口:包含了。net框架用于從對象中提取元素的方法。如果類包含一個元素的集合,并希望其他代碼段使用foreach循環(huán)語句遍歷該集合中的每一個元素則應(yīng)該在類上實現(xiàn)該接口。 IEnumerable接口值包含一個方法定義GetEnumerator(),用于返回一個循環(huán)訪問集合的枚舉數(shù)。 IEnumerator接口:支持對非泛型集合的簡單迭代。該接口定義了一個屬性和兩個方法 1.Object Current{get}屬性,獲取集合中的當(dāng)前元素 2.bool MoveNext()方法,訪問集合的下一個元素 3.void Reset()方法,設(shè)置枚舉數(shù)為其初始位置。 使用時必須引用System。Collection命名空間 public class Car : IEnumerable, IEnumerator { private short flag = -1; public IEnumerator GetEnumerator() { return this; } public object Curretn { get { switch (flag) { case 0: return "aodi"; case 1: return "huangguan"; default : return "this is Error"; |