Time of Update: 2017-03-04
首先看代碼: int a = 1; int b = a; a = 2; bool valOrRef = b == 2 ;//false; 可以看出int類型是實值型別,因為b並沒有跟隨a改變。 再看下面代碼: string str11 = "qa"; string str22 =
Time of Update: 2017-03-04
C#.NET 利用ToDictionary(),GroupBy(),可以將List轉化為Dictionary,主需要一行代碼!首先看一下需求,已知cars,等於: List<Car> cars = new List<Car>(){ new Car(1,"audiA6","private"),
Time of Update: 2017-03-04
C# 工具類--類型轉換的泛型方法using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data;namespace LinqPractice{ class Utility { public static T ConvertDataRow<T>(DataRow dr, string columnName,T
Time of Update: 2017-03-04
委託的非同步呼叫有時,如果要讓委託去完成一個複雜耗時的任務時,同步調用不是一個好的選擇,因為這樣使用者面臨的是無聊的時間消耗和漫長(相對來說)的等待。這時委託的非同步呼叫就體現出了優勢,關於委託的非同步呼叫C#也做了封裝,通過beginInvoke和endInvke來完成。下面給出一個例子。1. 定義了一個委託,myDelegate2. 定義了一個事件用於外部訂閱3. Increment,測試欄位4. doIt方法,每次被調用時increment都會自增,
Time of Update: 2017-03-04
C#迭代器與索引 簡單樣本迭代器是一種設計思想和設計模式,在C#中可以方便的實現一個迭代器,即實現Ienumerator介面。例如我有一個student類,現在想封裝一個studentCollection,代碼是這樣的:Student類: StudentCollection類:
Time of Update: 2017-03-03
C#擴充方法 入門小例擴充方法的定義:l 必須是靜態類,靜態方法l 第一個參數帶有關鍵字”this”,表示把這個方法賦給哪個類型代碼說明:這裡的例子是寫了一個靜態類,myExtension,一個擴充方法Add,表示所有的INT類型的數字都將具有調用這個Add方法的能力,條件是引入MyExtension的命名空間。 下面讓我們看一下用法:
Time of Update: 2017-03-03
C# 線程同步與線程池 樣本很簡單,準備5個線程,每個線程同時向控制台輸出數字,然後觀察輸出結果。代碼說明:////線程列表private static List<Thread> _threadList; static voidMain(string[] args) { Program._threadList= new List<Thread>(); ////附加5個線程
Time of Update: 2017-03-03
.NET中使用Protobuffer實現序列化和還原序列化 1. 到官方下載protobuf-net.dll,官方地址:http://code.google.com/p/protobuf-net/2. 建一個控制台應用程式3. 添加類庫:protobuf-net.dll到應用程式。範例程式碼:準備一個要測試的實體類(注意類和方法都要加上protoBuffer序列化的特性): [ProtoContract] public class Student {
Time of Update: 2017-03-03
(一)記憶體回收行程的基本假定(1)最近被分配記憶體空間的對象最有可能需要被釋放。在方法被執行前,通常需要為該方法所使用到的對象分配記憶體空間,搜尋最近被分配的對象集合有助於花費最少的工作來釋放進可能多的空閑記憶體空間。(2)生命期最長的對象需要釋放的可能性最小。在通過幾輪記憶體回收後仍然存在的對象不大可能是那種能夠在下一輪迴收中被釋放的臨時對象,搜尋這些記憶體塊往往要進行大量的工作,卻只能釋放很小一部分的記憶體空間。(3)同時分配記憶體的對象通常也會同時使用。將同時分配記憶體的Object
Time of Update: 2017-03-03
型別參數的約束(C# 編程指南)Visual Studio 2005其他版本在定義泛型類時,可以對用戶端代碼能夠在執行個體化類時用於型別參數的類型種類施加限制。如果用戶端代碼嘗試使用某個約束所不允許的類型來執行個體化類,則會產生編譯時間錯誤。這些限制稱為約束。約束是使用 where 內容關鍵字指定的。下表列出了六種類型的約束:約束說明T:結構型別參數必須是實值型別。可以指定除 Nullable 以外的任何實值型別。有關更多資訊,請參見使用可空類型(C# 編程指南)。T:類型別參數必須是參考型別,
Time of Update: 2017-03-03
效果頁面:
Time of Update: 2017-03-03
C# xml序列化類別的代碼執行個體詳解using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.IO;using System.Xml;using System.Xml.Serialization;using Imps.Services.CommonV4;namespace Imps.Services.IDCService.Utility{ public
Time of Update: 2017-03-03
XML還原序列化很方便,樣本: [XmlRoot(Root = "result")] public class UniMsgSetResult { [XmlAttribute("resultCode")] public int resultCode; [XmlElement("uniMsgSet")] public UniMsgSet uniMsgSet;
Time of Update: 2017-03-03
Xml CData的使用 擷取原始的節點內容的詳情代碼介紹string withoutCdata ="<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
Time of Update: 2017-03-03
非同步呼叫代理類AsyncInvokeProxy.csusing System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;namespace AsyncInvokeDemo{ public class AsyncInvokeProxy<T1> { private Action<T1> _task;
Time of Update: 2017-03-03
在記錄日誌的時候,有時候需要知道一個實體的每個欄位的值,這時候需要用反射來遍曆成員,拼成字串返回,如果成員仍然是一個自訂類型,需要遞迴執行。實現方式:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Reflection;using System.Collections;namespace ServerToolServer.Util{ public
Time of Update: 2017-03-02
有時候,當任務比較多的時候,需要做一個隊列。當隊列數量達到一定數量時候,進行出隊並處理,但是如果很長時間都沒有達到那個數量呢?那就加一個時間限制,例如30分鐘,1000個元素,哪一個條件先達到都會執行出隊操作。LazyQueue<T>類的實現:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;namespace
Time of Update: 2017-03-02
把建立對象的事情 封裝起來using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace DesignPytternDemo{ /// <summary> /// 簡單工廠 /// </summary> public interface IFood { int Price { get; } }
Time of Update: 2017-03-02
封裝演算法using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace DesignPytternDemo{ /// <summary> /// 策略模式 /// </summary> public abstract class BaseStategy { public virtual int
Time of Update: 2017-03-02
讓抽象和實現 獨立的變化public abstract class Game { public Game(string name) { this.Name = name; } public Play m_play { get; set; } public string Name { get; set; } public virtual void PlayForFun()