1. 服務端程式Code highlighting produced by Actipro CodeHighlighter
一種經常發生的裝箱Int32 i = 100;Console.WriteLine("The number is: " + i); 通過VS SDK Tools裡的IL DASM工具看看產生的IL代碼:.method private hidebysig static void Main(string[] args) cil managed{ .entrypoint // Code size 27 (0x1b) .maxstack 2 .locals init
問題描述 C#2.0出現了匿名方法, 這在一定程度上節省了我們維護代碼內容相關的精力, 也不需要思考為某個方法取什麼名字比較合適. 在FCL的一些方法中要求傳入一個Delegate類型的參數, 比如Control.Invoke或者Control.BeginInvoke方法:public object Invoke(Delegate method);public IAsyncResult BeginInvoke(Delegate method); 在這種情況下,
五一在家看了一會兒<重構手冊>, 想拿以前寫的代碼嘗試著改進改進, 想起去年暑假寫的區域網路聊天小工具, 現在看自己那時寫的代碼已經不堪入目, 最不可思議的當屬用了"多線程"處理網路請求, 現在覺得應該使用非同步方法呼叫.主要設計簡要說明 左邊部分表示的是用戶端的過程, 右邊部分表示的是服務端的過程. 用戶端相比服務端在建立串連之前步驟稍微少一些, 成功建立串連後用戶端和服務端都有一個CommunicateSocket負責與對方通訊, 如發送訊息,
在.net 1.1中我們無法對基礎類型,如int、DateTime、enum類型等賦予null的值,但這在實際應用中往往會帶來很多麻煩,比如有下面這個函數:class OrderDAC{ public ArrayList GetOrders(OrderStatus status){ }}public enum OrderStatus{ Initial, Canceled, Delivered}如果我們希望該函數GetOrders中當輸入的為status ==
近幾日,看了一下 Android 開發,看到 java 與 C# 有許多不同的用法。都是物件導向的語言,但是禪宗分南北,還是有不少用法上的不同,這裡總結一下。一. 類名.this 與內部類在 java 中,經常看到類似類名.this 的用法,this 就是當前對象執行個體,為什麼前面會出現類名呢?對此 C# 程式員會很納悶。在 Java 中,很多地方使用到了內部類,甚至可以在在內部類中訪問外部類中的成員,這個時候,在內部類中使用 this 的時候,就會出現 this
這篇文章本來是星期五晚寫好了, 因6日去旅遊了, 沒來得急發上來1. 同樣, 我們先看看這一個比簡單的 結構體代碼Code highlighting produced by Actipro CodeHighlighter
單播(點對點) 通訊,即網路中單一的源節點發送封包到單一的上的節點。 在廣播通訊中, 網路層提供了將封包從一個節點發送到所有其他節點的服務。 利用廣播(broadcast) 可以將資料發送給本地子網上的每個機器。廣播的缺點是如果多個進程都發送廣播資料, 網路就會阻塞。1. 服務端代碼Code highlighting produced by Actipro CodeHighlighter
IP多播(也稱多址廣播或組播)技術,是一種允許一台或多台主機(多播源)發送單一資料包到多台主機(一次的,同時的)的TCP/IP網路技術。 多播作為一點對多點的通訊,是節省網路頻寬的有效方法之一。 在網路音頻/視頻廣播的應用中,當需要將一個節點的訊號傳送到多個節點時,無論是採用重複點對點通訊方式,還是採用廣播方式,都會嚴重浪費網路頻寬,只有多播才是最好的選擇。 多播能使一個或多個多播源只把資料包發送給特定的多播組,而只有加入該多播組的主機才能接收到資料包。 目前,
/* * brief: genericity programming * */#include <stdio.h>#include <stdlib.h>#include <assert.h>#define GENERIC_STACK( STACK_TYPE, SUFFIX, STACK_SIZE ) \ \
#include <stdio.h>#include <stdlib.h>#include <malloc.h>#include <assert.h>#include <pthread.h>#define FALSE 0pthread_mutex_t thread_mutex = PTHREAD_MUTEX_INITIALIZER;pthread_mutex_t task_mutex =
1、棧區(stack)— 由編譯器自動分配釋放 ,存放函數的參數值,局部變數的值等。其操作方式類似於資料結構中的棧。 2、堆區(heap) — 一般由程式員分配釋放, 若程式員不釋放,程式結束時可能由OS回收 。注意它與資料結構中的堆是兩回事,分配方式倒是類似於鏈表,呵呵。 3、全域區(靜態區)(static)—,全域變數和靜態變數的儲存是放在一塊的,初始化的全域變數和靜態變數在一塊地區, 未初始化的全域變數和未初始化的靜態變數在相鄰的另一塊地區。 - 程式結束後有系統釋放
1.自訂控制項, 和介面 interface IModify {bool IsModified { get; } }class TextBoxEx : TextBox, IModify {private bool isModified = false;public bool IsModified {get { return isModified; } }protected override void
使用"命名方法"實現lambda的功能(Before C#2.0) C#2.0之前, 如果一個方法或者變數需要使用委託(delegate)時, 則之前必須建立一個命名方法, 並在需要委託的位置傳入這個名稱. 比如有一個針對int類型的資料處理, 目的是篩選出一個int數組中為奇數的元素, 或者其它一些滿足條件的元素...public class Commom{ //命名一個委託方法 public delegate bool IntFilter(int i); //
線程的作用 早期的作業系統沒有 "線程" 的概念, 例如16位的 Windows 就是一個不支援多線程的作業系統. 這樣的系統有一個特徵: 整個系統同時只運行著一個任務, 包含作業系統代碼還有應用程式的代碼. 這帶來了一個問題: 如果當前啟動並執行這個任務需要很長一段時間才能執行完成, 它就會阻止其它任務執行. 如果某個程式含有 bug, 程式進入了一個死迴圈, 使用者只好重新啟動電腦了. 這樣的作業系統顯然很不給力, 微軟決定改進作業系統核心, 讓它的健壯性,
var是初始化一個匿名型別對象的專用關鍵字, 如果結合var和匿名型別, 在C#3.0中初始化一個匿名型別的對象是十分有個性的, 這樣的初始化方法讓當時剛接觸C#的我一直摸不清頭腦, 例如下面這個例子:var myFriend = new {Name = "Tom", Sex = "male"}; 這樣就初始化了一個匿名對象, 當然關鍵字var的引入, 背後是強大的編譯器做支援,
class Program {static void Main(string[] args) {//int i = 11;//int b = (i & 0xf0);//byte temp = 0x86;//var h = temp & 0xf0;//Console.WriteLine("{0}", i);//Console.ReadKey();ushort buf = 0xf1f0;var cmd = (cmd)((buf & 0xff00) >
分部方法那些方法原型或定義都是在部分類別的聲明中指定, 但是沒有在該部分類別的相同聲明中提供方法的具體實現方法. 一般情況下, 在相同部分類別中的其它任何聲明中都沒有對這個方法的任何實現. 如果在相同部分類別的任何其它聲明中都美譽這個方法的實現, 則編譯器將不會為這個方法的聲明, 對該方法的調用, 或者為傳遞到該方法參數的賦值而產生IL代碼. 就好像這個方法從來都沒有存在過一樣.分部方法的樣本using System;namespace LinqTest{
幾個月前做的一個軟體裡想添加一個天氣預報功能, 也就是利用了一下Google Weather的介面: http://www.google.com/ig/api?hl=zh-cn&weather=某某市,某某省 , 效果也達到了. 不忘書中所講: 耗時操作, 且非計算密集型任務, 最好使用非同步方法呼叫. 根據Anders Hejlsberg的視頻中示範的那樣, 我寫出下面一段代碼, 也是很多人拿來示範非同步經典寫法: public void
"擴充方法"是一個靜態類的靜態方法, 我們可以像調用其它類執行個體的方法那樣來調用擴充方法.擴充方法的聲明和調用 例如我想給string類型添加一個ToInt32的靜態方法, 把string類型變成Int32類型:public static class ExMethod{ public static Int32 ToInt32(this string s) { return Int32.Parse(s); }}