日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內(nèi)最全I(xiàn)T社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > php開源 > php教程 > C#總結(jié)

C#總結(jié)

來源:程序員人生   發(fā)布時間:2015-03-27 08:02:36 閱讀次數(shù):3687次
ref http://www.w3cschool.cc/csharp/csharp-generic.html
     https://msdn.microsoft.com/zh-cn/library/aa288460(v=vs.71).aspx
     http://blog.csdn.net/hawksoft/article/details/7534332
  • using
  • 數(shù)組:
    • int [] array = new int[10]
    • int[,] tbl = new int[1,2]
    • int[][] tbl = new int[1][]
    • int[,] numbers = { {1, 2}, {3, 4}, {5, 6} };                              numbers[1,1]
    • int[][] numbers = { new int[] {2,3,4}, new int[] {5,6,7,8,9} }; numbers[0][2]
    • System.Array 類提供許多有用的其他方法/屬性,如用于排序、搜索和復(fù)制數(shù)組的方法。
    • foreach (int i in numbers)
  • 屬性:
    • public class A {}
    • A中:public string Name{ get{return xx}  set{xx = value}}
  • 虛函數(shù):
    • A中:public virtual void f()
    • A的子類B:public class B : A {}
    • B中:public override void f() 重寫
    •          public new void f() 覆蓋
    • A a = new B()
  • interal: 只能在程序集中訪問。你寫了1個記錄日志的DLL,任何項目只要援用此DLL就可以實現(xiàn)記錄日志的功能,這個DLL文件的程序就是1個程序集。
  • 自定義1個可以foreach的集合類:https://msdn.microsoft.com/zh-cn/library/aa288462(v=vs.71).aspx
  • 結(jié)構(gòu):
    • 結(jié)構(gòu)可能看似類,但存在1些重要差異,應(yīng)引發(fā)注意。首先,類為援用類型,而結(jié)構(gòu)為值類型。使用結(jié)構(gòu),您可以創(chuàng)建行動類似內(nèi)置類型的對象,同時享有它們的好處。
    • 在類上調(diào)用“新建”(New) 運算符時,它將在堆上進(jìn)行分配。但是,當(dāng)實例化結(jié)構(gòu)時,將在堆棧上創(chuàng)建結(jié)構(gòu)。這樣將產(chǎn)生性能增益。而且,您不會像對待類那樣處理對結(jié)構(gòu)實例的援用。您將直接對結(jié)構(gòu)實例進(jìn)行操作。鑒于此緣由,向方法傳遞結(jié)構(gòu)時,結(jié)構(gòu)將通過值傳遞,而不是作為援用傳遞
    • 當(dāng)向方法傳遞結(jié)構(gòu)時,將傳遞該結(jié)構(gòu)的副本,而傳遞類實例時,將傳遞1個援用。
    • 結(jié)構(gòu)可以聲明構(gòu)造函數(shù),但它們必須帶參數(shù)。聲明結(jié)構(gòu)的默許(無參數(shù))構(gòu)造函數(shù)是毛病的。結(jié)構(gòu)成員不能有初始值設(shè)定項。總是提供默許構(gòu)造函數(shù)以將結(jié)構(gòu)成員初始化為它們的默許值。
    • 如果不使用“新建”(new),那末在初始化所有字段之前,字段將保持未賦值狀態(tài),且對象不可用。
    • 對結(jié)構(gòu),不像類那樣存在繼承1個結(jié)構(gòu)不能從另外一個結(jié)構(gòu)或類繼承,而且不能作為1個類的基。但是,結(jié)構(gòu)從基類對象繼承。結(jié)構(gòu)可實現(xiàn)接口,而且實現(xiàn)方式與類實現(xiàn)接口的方式完全相同。
    • 結(jié)構(gòu)控制:[FieldOffset(0)] 
  • 索引器:類似虛擬數(shù)組
    • 對象可以用[]訪問
    •  public int this[long index] {get{ ...}   set{ ...} }
    • 自動轉(zhuǎn)換:
    • 可以將轉(zhuǎn)換聲明為 implicit(需要時自動轉(zhuǎn)換)或 explicit(需要調(diào)用轉(zhuǎn)換)。所有轉(zhuǎn)換都必須為 static,并且必須采取在其上定義轉(zhuǎn)換的類型,或返回該類型。
    • A中:static public implicit operator A(int value)
    •          static public explicit operator int(A a)
  • 運算符重載
    • public static Complex operator +(Complex c1, Complex c2) 
    • public override bool Equals(object o) 
    • public override int GetHashCode() 
    • public override string ToString() 
  • 拜托:類似函數(shù)指針
    • 拜托聲明定義1種類型,它用1組特定的參數(shù)和返回類型封裝方法。對靜態(tài)方法,拜托對象封裝要調(diào)用的方法。對實例方法,拜托對象同時封裝1個實例和該實例上的1個方法。
    • public delegate void ProcessBookDelegate(Book book);//聲明1個拜托
    • BookDB中,有Book列表:public void process(ProcessBookDelegate processBook){ processBook(b) } //調(diào)用拜托,可以通過使用 BeginInvoke 和 EndInvoke 方法同步或異步調(diào)用拜托。
    • Processor中,有1系列的inter方法:void f1(Book b) ...
    • 調(diào)用:bookDB.process(new ProcessBookDelegate (Processor.f1)//實例化拜托
    • 拜托的+和-: a = new ProcessBookDelegate (Processor.f1)
    •                    b = new ProcessBookDelegate (Processor.f2)
    •                    c = a + b =>調(diào)用c(book)時,同時調(diào)用f1和f2
    •                    c = a - b
  • 事件:利用拜托
    • 有兩個對象:Listener和Subject
    • Subject:持有event,當(dāng)產(chǎn)生變化時將主動調(diào)用event
    • Listener:持有Subject的ref,并且負(fù)責(zé)向Subject中的event對象attach和dettach自己的方法
    • --------------------視察者模式Observer----------------------
    • Subject接口中有3類主要方法,分別注冊視察者(attatch)、刪除視察者(detach)和通知視察者(notify),
    • ConcreteSubjects實現(xiàn)類存儲具體的狀態(tài)并持有多個ConceteObserver對象(可以組織成ArrayList),當(dāng)狀態(tài)改變時就調(diào)用notify方法,notify方法中遍歷所有的ConcreteObserver,調(diào)用其updata方法。
    • Subject聲明事件:public delegate void EventHandler(object sender, EventArgs e); // 聲明該事件的拜托類型,拜托類型定義傳遞給處理該事件的方法的1組參數(shù)
    •                 public event EventHandler Changed//聲明事件本身,聲明事件的方法與聲明拜托類型的字段類似,只是關(guān)鍵字 event 在事件聲明前面,在修飾符后面。事件通常被聲明為公共事件,但允許任意可訪問修飾符
    • Subject 調(diào)用事件: 類聲明了事件以后,可以就像處理所唆使的拜托類型的字段那樣處理該事件。如果沒有任何客戶將拜托與該事件掛鉤,該字段將為空;否則該字段援用應(yīng)在調(diào)用該事件時調(diào)用的拜托。因此,調(diào)用事件時通常先檢查是不是為空,然后再調(diào)用事件。
    •                  if (Changed != null)   Changed(this, e); //調(diào)用方法,1般名為onChanged
    • Listener與事件掛鉤在該字段上撰寫新的拜托、從字段(多是復(fù)合字段)移除拜托。
    •                 Subject.Changed += new EventHandler(Listener.f1)
    •                 Subject.Changed -= new EventHandler(Lintener.f1)
    • 總的來講,和拜托很像。只是添加了1個event Changed,可以集中管理所有EventHandler
    • event可看作1個拜托的實例,當(dāng)沒有函數(shù)時,為null,否則就是綁定的函數(shù)
    • 事件和繼承由于事件只能從聲明它們的類中調(diào)用,因此派生類不能直接調(diào)用在基類內(nèi)聲明的事件。雖然這有時符合需要,但通常使派生類能夠自由調(diào)用事件更適合。這通常通過為事件創(chuàng)建受保護(hù)的調(diào)用方法來實現(xiàn)。通過調(diào)用該調(diào)用方法,派生類即可以調(diào)用此事件。為取得更大的靈活性,調(diào)用方法通常聲明為虛擬的,這允許派生類重寫調(diào)用方法。這使得派生類可以截獲基類正在調(diào)用的事件,有可能對這些事件履行它自己的處理。
    • 接口中的事件:事件和字段之間的另外一個差異是,事件可放在接口中,而字段不能。當(dāng)實現(xiàn)接口時,實現(xiàn)類必須在實現(xiàn)接口的類中提供相應(yīng)的事件。
  • 特性Attribute
    • 用于在運行時傳遞程序中各種元素(比如類、方法、結(jié)構(gòu)、枚舉、組件等)的行動信息的聲明性標(biāo)簽。您可以通過使用特性向程序添加聲明性信息。1個聲明性標(biāo)簽是通過放置在它所利用的元素前面的方括號([ ])來描寫的。
    • 預(yù)定義特性:  
    •         AttributeUsage:描寫了如何使用1個自定義特性類
    •         Conditional:這個預(yù)定義特性標(biāo)記了1個條件方法,其履行依賴于它頂?shù)念A(yù)處理標(biāo)識符。它會引發(fā)方法調(diào)用的條件編譯,取決于指定的值,比如 Debug 或 Trace。例如,當(dāng)調(diào)試代碼時顯示變量的值。
    •          Obsolete: 這個預(yù)定義特性標(biāo)記了不應(yīng)被使用的程序?qū)嶓w。
    • 自定義特性:.Net 框架允許創(chuàng)建自定義特性,用于存儲聲明性的信息,且可在運行時被檢索。
    •     創(chuàng)建并使用自定義特性包括4個步驟:
    •         聲明自定義特性:1個新的自定義特性應(yīng)派生自 System.Attribute 類
      • // 1個自定義特性 BugFix 被賦給類及其成員
      • [AttributeUsage(AttributeTargets.Class |
      • AttributeTargets.Constructor |
      • AttributeTargets.Field |
      • AttributeTargets.Method |
      • AttributeTargets.Property,
      • AllowMultiple = true)]
      • public class DeBugInfo : System.Attribute
    •         構(gòu)建自定義特性:和構(gòu)建類1樣,必須有構(gòu)造函數(shù),傳入必須(positional)的參數(shù)
    •         在目標(biāo)程序元素上利用自定義特性:
      • [DeBugInfo(45, "Zara Ali", "12/8/2012", Message = "Return type mismatch")]
    •         通過反射訪問特性
      • System.Reflection.MemberInfo info = typeof(MyClass);
      • info.GetCustomAttributes
  • 反射
    • 它允許在運行時查看屬性(attribute)信息。
    • 它允許審查集合中的各種類型,和實例化這些類型。
    • 它允許延遲綁定的方法和屬性(property)。
    • 它允許在運行時創(chuàng)建新類型,然后使用這些類型履行1些任務(wù)。
    • Type type = Type.GetType("System.Int32", false, true);
    • object o = System.Activator.CreateInstance(type);
    • Debug.Assert(o.GetType() == typeof(int));
  • 匿名方法:通過delegate實現(xiàn)
    • delegate void MyDelegate(int n);
    • MyDelegate nc = delegate(int x) {...}
    • 調(diào)用:nc(10)
  • lambda表達(dá)式:Lambda 表達(dá)式的作用是為了使用更簡單的方式來編寫匿名方法,完全簡化拜托的使用方式。
    • MyDelegate nc =(int x)=> {...} 
    • 當(dāng)中 “ => ” 是 Lambda 表達(dá)式的操作符,在左側(cè)用作定義1個參數(shù)列表,右側(cè)可以操作這些參數(shù)。
  • 動態(tài)對象:利用DynamicObject
    • 定義1個拜托,參數(shù)個數(shù)可變,參數(shù)都是object類型:這里的拜托有個dynamic參數(shù),代表調(diào)用這個拜托的動態(tài)對象本身.
      • public delegate object MyDelegate(dynamic Sender, params object[] PMs);
    • 定義1個拜托對象,以綁定匿名方法。由于dynamic對象不能直接用匿名方法,這里用對象去承載
      • public class DelegateObj
      •  {
      •         private MyDelegate _delegate;
      •         public MyDelegate CallMethod//調(diào)用方法
      •         {
      •             get { return _delegate; }
      •         }
      •         private DelegateObj(MyDelegate d)//構(gòu)造函數(shù)
      •         {
      •             _delegate = d;
      •         }
      •         public static DelegateObj Function(MyDelegate D)// 構(gòu)造拜托對象
      •         {
      •             return new DelegateObj(D);
      •         }
      • }
    • 定義1個動態(tài)對象:
    • public class DynObj : DynamicObject
    • {
    •         private Dictionary<string, object> _values;  //保存對象動態(tài)定義的屬性值
    •         public DynObj()
    •         {
    •             _values = new Dictionary<string, object>();
    •         }
    •         public object GetPropertyValue(string propertyName) //獲得屬性值
    •         {
    •             if (_values.ContainsKey(propertyName) == true)
    •             {
    •                 return _values[propertyName];
    •             }
    •             return null;
    •         }
    •         public void SetPropertyValue(string propertyName,object value) // 設(shè)置屬性值
    •         {
    •             if (_values.ContainsKey(propertyName) == true)
    •             {
    •                 _values[propertyName] = value;
    •             }
    •             else
    •             {
    •                 _values.Add(propertyName, value);
    •             }
    •         }
    •         public override bool TryGetMember(GetMemberBinder binder, out object result)// 實現(xiàn)動態(tài)對象屬性成員訪問的方法,得到返回指定屬性的值
    •         {
    •             result = GetPropertyValue(binder.Name);
    •             return result == null ? false : true;
    •         }
    •         public override bool TrySetMember(SetMemberBinder binder, object value)// 實現(xiàn)動態(tài)對象屬性值設(shè)置的方法。
    •         {
    •             SetPropertyValue(binder.Name, value);
    •             return true;
    •         }
    •         public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)// 動態(tài)對象動態(tài)方法調(diào)用時履行的實際代碼
    •         {
    •             var theDelegateObj = GetPropertyValue(binder.Name) as DelegateObj;
    •             if (theDelegateObj == null || theDelegateObj.CallMethod == null)
    •             {
    •                 result = null;
    •                 return false;
    •             }
    •             result = theDelegateObj.CallMethod(this,args);
    •             return true;
    •         }
    •         public override bool TryInvoke(InvokeBinder binder, object[] args, out object result)
    •         {
    •             return base.TryInvoke(binder, args, out result);
    •         }
    • }
    • 使用方法:
    •  dynamic theObj = new DynObj();
    • theObj.aaa = "this is a test";//動態(tài)屬性
    • theObj.show = DelegateObj.Function((s, pms) =>
    • // 動態(tài)方法 }
    • );//這里使用lambda表達(dá)式,實際上也能夠是由delegate定義的1個匿名函數(shù)
    • theObj.show("hello");
  • Linq
    • 使用類似sql語句的方式查詢xml和集合中的數(shù)據(jù)
    • IEnumerable<int> scoreQuery =
    •             from score in scores
    •             where score > 80
    •             select score;
  • System.Generic
    • System.Collections.Generic.Dictionary<>;       //鍵/值對集合
    • System.Collections.Generic.KeyValuePair<>;     //鍵/值對結(jié)構(gòu), 作為 Dictionary<> 的1個元素存在
    • System.Collections.Generic.SortedDictionary<>; //相當(dāng)于 Key 能自動排序 Dictionary<>
    • System.Collections.Generic.SortedList<>;       //和 SortedDictionary<> 功能相似, 但內(nèi)部算法不同, 其 Keys、Values 可通過索引訪問 
    • System.Collections.Generic.HashSet<>;   //無序、無重復(fù)的元素集合
    • System.Collections.Generic.SortedSet<>; //相當(dāng)于能自動排序的 HashSet<>
    • System.Collections.Generic.List<>;      //相當(dāng)于泛型的 ArrayList, 元素可重復(fù)、可排序、可插入、可索引訪問
    • System.Collections.Generic.Queue<>; //隊列, 先進(jìn)先出
    • System.Collections.Generic.Stack<>; //堆棧, 落后先出
    • System.Collections.Generic.LinkedList<>;     //雙向鏈表
    • System.Collections.Generic.LinkedListNode<>; //LinkedList<> 的節(jié)點
    • System.Collections.Generic.SynchronizedCollection<>;         //線程安全的集合
    • System.Collections.Generic.SynchronizedReadOnlyCollection<>; //線程安全的只讀集合
    • System.Collections.Generic.SynchronizedKeyedCollection<>;    // 線程安全的鍵/ 值集合
    • 字符串方法:http://www.w3cschool.cc/csharp/csharp-string.html
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機掃描二維碼進(jìn)行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 国产精品美女在线观看 | 国产一区二区在线播放 | 成人看片网 | 亚洲综合婷婷 | 日韩免费一级 | 欧美日韩在线一区 | 欧美日韩亚洲成人 | 成人爽a毛片一区二区免费 精品麻豆 | 中文字幕精品久久久乱码 | 欧美在线视频二区 | 亚洲一区二区成人 | 亚洲视频在线播放 | 欧美一区二区三区影视 | 国外成人在线视频 | 国产白浆在线观看 | 欧美日韩亚洲成人 | 欧美精品在线一区 | 欧美性大战xxxxx久久久 | 国产成人综合在线 | 91精品国产91久久综合 | 国产一区二区三区精品在线观看 | 国产乱码一区二区三区 | 欧美成人精品一区 | 欧美日韩国产色综合一二三四 | 999视频在线观看 | 国产一区二区在线免费视频 | 99精品免费观看 | 天天干夜夜操视频 | 91精品久久久久久久久青青 | 中文字幕日韩av | 国产精品久久久久无码av | 国产精品久久久久久久久久久免费看 | 国产精品久久久久久久久搜平片 | 亚洲一区精品在线 | www.怡红院.com | 91久久久久久久久久久久久 | 男女爱爱网站 | 国产精品美女视频 | 91精品国产综合久久精品图片 | 日韩一区二区视频 | 亚洲日韩中文字幕一区 |