C# Socket編程(1)基本的術語和概念

  電腦程式能夠相互連網,相互連訊,這使一切都成為可能,這也是當今互連網存在的基礎。那麼程式是如何通過網路相互連信的呢?這就是我記錄這系列的筆記的原因。C#語言從一開始就是為了互連網而設計的,它為實現程式的相互連信提供了許多有用API,這類應用編程介面被稱為通訊端(Socket)。在開始學習C# Socket之前我們需要先來瞭解一下基本的術語和概念。閱讀目錄:  1.電腦網路  2.分組報文  3.協議    3.1 IP協議    3.2 TCP協議    3.2 UDP協議  4.網路地址 

《Effective C#》讀書筆記——條目10:使用選擇性參數減少方法重載的數量

  C#4.0 引入了具名參數(MSDN翻譯為“命名實參”,個人認為具名參數更形象,選擇性參數亦是)和選擇性參數(可選實參)。用戶端代碼使用具名參數意味著:方法中的參數名稱也成為了公有介面的一部分。假如修改公有參數的名稱將有可能破壞調用者的代碼。這意味著:調用者應該儘可能的避免使用具名參數,而作為API的設計者,也應該避免修改公有貨受保護方法中參數的名稱。  當然,並不是說具名參數是一無是處的,它也有自己的適用的情境。具名參數配合選擇性參數可以簡化很多API的調用文法,特別是Microsoft

【點滴積累】在C#中使用反射動態調用類型成員

1.背景  學習C#的時候就知道使用反射可以對我們編程提供極大的便利(動態擷取資訊、調用類型成員、建立執行個體等等),但是在實際的工作中直接使用反射的機會比較少,有印象的就是一次自己做的WinForms小工具的時候利用反射來動態擷取表單上的每個控制項,並且為必要的控制項動態添加註冊事件。因為剛入職新公司,為了更快的瞭解公司的業務、和開發習慣,先和現在公司同事一起修改現有系統的一些小Bug。在Tester提交的Bug中有一個是對GridView進行動態排序——點擊一個列時使用該列作為條件進行排序(

《Effective C#》讀書筆記——條目21:限制類型的可見度

   在保證類型可以完成其工作的前提下,我們應該儘可能的給類型分配最小的存取層級。可見度越低那麼以後升級更改時所需的變化也就越少——因為能訪問你的功能的代碼越少,以後可能出現的修改也就會越少。 使用內部類來限制類型範圍  建立內部類是一種常被忽略的限制類型範圍的方法,在建立一個類時,應該仔細考慮這個新類型的作用範圍:是將被所有的客戶使用?還是僅僅用在程式集的內部。內部的類可以讓你在稍後的任意替換其具體的實現,只要兩個類實現同樣的介面即可。例如下面驗證電話號碼的類:1 public class

《Effective C#》讀書筆記——條目15:使用using和try/finally清理資源

  在.NET環境中,非託管系統資源由開發人員來負責釋放,且非託管系統資源必須顯式的使用IDisposable介面的Dispose()來釋放(詳見:瞭解.NET記憶體管理機制)。所有封裝或使用了非託管資源的類型都實現了IDisposable介面。同時這些類也在終結器中調用Dispose(),保證了開發人員在忘記資源釋放的時候仍然能夠正常的釋放掉資源(對象資源會一直停留在記憶體中,直到終結器被調用),這會導致資源在記憶體中停留的時間更長,導致應用程式會佔用更多的系統資源。 閱讀目錄:    1.使

《Effective C#》讀書筆記——條目22:通過定義並實現介面替代繼承

  介面是一種按照契約設計的方式,一個類型必須實行介面中定義的方法。抽象基類則為一組相關的類型提供了一個共有的抽象。要注意二者的使用情境和區別:基類描述了對象是什麼;介面描述了對象將如何表現行為。 1.關於介面   介面描述了一組功能,是一個契約,任何實現介面的類型必須為介面中定義的所有所有元素提供具體的實現。我們應該將可重用的行為提取出來,定義在介面中;由於不同相關的類型均可以實現一個介面,所有這會增加代碼的重用率。對於開發人員本身來說,實現介面要比繼承自訂的基類更容易。  2.關於抽象基類 

《Effective C#》讀書筆記——條目16:避免建立非必要的對象

  我們知道:C#是一門虛擬機器語言,C#編譯器首先將C#代碼編譯成IL代碼,運行程式時CLR(Common Language Runtime,通用語言執行平台)通過調用JIT(just-in-time Compiler,即時編譯器)來將IL代動態即時編譯成可執行檔機器碼。GC(Garbage Collector,垃圾收集器)自動為我們的應用程式進行記憶體管理的分配和釋放,(具體參見:瞭解.NET

C# 溫故知新 基礎篇(5) 類

  類時物件導向編程最基本的構造就是類或者本身,我們可以將類想象一個模板,它定義了一個零件的樣子。對象就是用這些模具建立的零件。從結構化的、基於控制流程的程式轉向物件導向的程式,思維模式發生了根本性變化,因為物件導向編程提供了一個額外的組織層次。較小的程式得到了某種程度上的簡化,更重要的是,通過物件導向思想來編程提供了建立更大規模的程式,因為代碼得到了更好的組織。同時物件導向編程的關鍵優勢之一,就是不許要重新建立新的程式,可以在現有的一系列對象組裝到一起,用新的功能來擴充類,添加更多的類,然後重

《Effective C#》讀書筆記——瞭解.NET記憶體管理機制

  我們知道C#是一門虛擬機器語言,在C#編譯器首先將C#代碼編譯成IL代碼,運行程式時CLR(Common Language Runtime,通用語言執行平台)通過調用JIT(just-in-time Compiler,即時編譯器)來將IL代動態即時編譯成可執行檔機器碼。在CLR中有一個非常重要的概念:CLR GC(Garbage Collector,垃圾收集器),GC自動為我們的應用程式進行記憶體管理的分配和釋放,所以在.NET應用程式中一般很少出現記憶體泄露、懸掛指標、未初始化指標等問題。

《Effective C#》讀書筆記——條目18:區分實值型別和參考型別

  C#和JAVA不同,在C#中可以建立實值型別,而在Java中建立的所有類型都是參考型別。在使用C#開發時,選擇實值型別還是參考型別對我們的程式的行為會產生很大的影響,所以我們需要對實值型別和參考型別的使用情境進行瞭解和對二者的不同進行區分。 1.引入參考型別和實值型別的原因    C#之所以添加了實值型別和參考型別的區別是由於:C++和Java中普遍存在的問題,在C++中,所有的參數和傳回值都是通過值類傳遞。傳值非常高效,不過卻會帶來部分複製(partial

《Effective C#》讀書筆記——條目17:實現標準的銷毀模式

  如何為我們自己的包含非託管資源的類型編寫資源管理代碼呢?在 .NET 中為我們提供了一種標準的銷毀非託管資源的模式,這個標準的模式能夠使使用者通過調用IDisposable介面正常釋放掉非託管資源,也能夠保證使用者在忘記釋放資源時使用終結器釋放。這個標準模式可以和GC配合,保證僅在最糟糕的情況下才調用終結器,儘可能的降低其帶來的效能影響。 閱讀目錄:    1.實現IDisposable介面      1.1 資源釋放的標準模式    2.提供終結器      2.1 解構函式    小節 

《Effective C#》讀書筆記——條目23:理解介面方法和虛方法的區別

  實現和覆寫虛方法的區別:介面中聲明的成員預設不是虛方法。衍生類別不能覆寫基類中實現的介面成員。介面可以被顯式實現,這會使針對該類的公有成員隱藏起來。介面與虛方法的概念不同,用法也不同。 改變從基類繼承的介面在衍生類別中的行為  我們來看一個簡單的例子: 1 interface IMsg 2 { 3 void Message(); 4 } 5 public class MyClass : IMsg 6

《Effective C#》讀書筆記——條目24:用委託實現回調

  在C#語言中,回調是通過委託來實現的。委託為我們提供了安全的回調定義,大多數委託都和事件相關,但這不是委託的全部應用情境,當類之間需要通訊,並且我們希望一種比介面更加松耦合的機制時,委託便是最佳選擇。委託允許我們在運行時配置目標並且通知多個客戶對象,委派物件中包含一個引用,該方法可以使靜態方法也可以是執行個體方法。使用委託,我們可以和一個或者多個在運行時聯絡起來的客戶對象進行通訊。 Lambda運算式  回調和委託在C#中非常常用,C#為委託提供了精簡的文法——Lambda運算式。同時.NE

《Effective C#》讀書筆記——條目12:推薦使用成員初始化器而不是指派陳述式

文章目錄 1.初始化對象為0或null時2.對同一個變數執行不同的初始化方式3.需要進行異常處理   一般情況下,一個類都會有多個建構函式。隨著時間的推移,成員變數、建構函式不斷增加。為了處理這種情況最方便的辦法就是:在聲明變數的時候進行初始化,而不是在每個建構函式中進行。無論是類成員(靜態變數)合適執行個體變數,我們都應該充分利用初始化器的文法。  C#編程在,一般在聲明一個變數的同時我們會對其進行初始化:1 class

《Effective C#》讀書筆記——條目26:避免返回對內部類對象的引用

  可能你會認為唯讀屬性就只能讀取,調用者不可能改變屬性值。並非所有的情況都是如此,我們看下面的樣本: 1 public class MyBusinessObject 2 { 3 private List<string> listOfData = new List<string> {"COM1","COM2","COM3","COM4","COM5","COM6" }; 4 5 public List<string&

《Effective C#》讀書筆記——條目1:使用屬性而不是可訪問的資料成員

文章目錄 屬性的多線程支援屬性是通過方法來實現的,那麼自然屬性也擁有方法的所有語言特徵(abstract,Interface,virtual...)

《Effective C#》讀書筆記——條目27:讓類型支援序列化

  持久化(persistence)是類型的一個重要特性。只要我們的類型不是UI控制項、表單或者表單,都應該儘可能的為類型添加序列化支援。.NET的序列化是把類中所有成員變數儲存到輸出資料流中,同時.NET的序列化還支援任意的對象圖(object graph):即使你的對象上有一個循環參考,serialize 和deserialize 方法都只會為你的實際對象讀取和儲存一次。 1.

《Effective C#》讀書筆記——條目13:正確地初始化靜態成員變數

  我們知道在C#語言中建立一個類型的執行個體前,就應該初始化該類型的所有靜態成員變數。C#語言為我們提供了靜態初始化器和靜態建構函式。其中,靜態建構函式是一個特殊的建構函式,將在其他所有方法執行前以及變數或屬性被第一次訪問之前將自動調用靜態建構函式,且僅執行一次。我們可以通過使用靜態建構函式來初始化靜態變數、實現單例模式或者執行類在可用之前的所有操作。但是不能夠使用執行個體建構函式專門的私人函數或者其他什麼方式來初始化靜態變數。  靜態類成員變數也有和執行個體成員類似的初始化器文法,如果只是需

《Effective C#》讀書筆記——條目19:保證0為實值型別的有效狀態

  .NET系統的預設初始化過程會將所有的對象設定為0。我們就會難免建立出一個初始化為0值的實值型別,所以我們應該將0作為類型的預設值,可以避免一些不必要的Bug。 1.將0設定為枚舉的有效值  使用枚舉時我們必須將0設定為枚舉的一個有效選項。所以枚舉值都派生於System.ValueType。枚舉預設的值開始於0,但是也可以自訂:1 public enum Month2 {3 //枚舉的預設值是從0開始4 Jan = 1,5

《Effective C#》讀書筆記——條目14:盡量減少重複的初始化邏輯

  建構函式的工作是為了初始化對象的所有成員,而一個類有多個建構函式又是一個非常常見的情景,所有這些建構函式難免會有類似乃至相同的邏輯,並且隨著時間的推移,成員變數的增加,功能的改變,建構函式的個數也會不斷上升。很多的開發人員一般會先編寫一個建構函式,然後將其代碼複製粘貼到其他的建構函式當中,以支援在類介面上定義的多個重寫建構函式.其實我們不應該這樣做,當發現多個建構函式包含類似的邏輯時,我們可以將其提取到一個公用的建構函式中。這樣既可以避免代碼重複也可以利用建構函式初始化器(construct

總頁數: 4314 1 .... 491 492 493 494 495 .... 4314 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.