c#:使用 ref 和 out 傳遞數組

1、與所有的 out 參數一樣,在使用數群組類型的 out 參數前必須先為其賦值,即必須由接受方為其賦值。例如:public static void MyMethod(out int[] arr) {   arr = new int[10];   // 數組arr的明確委派}2、與所有的 ref 參數一樣,數群組類型的 ref 參數必須由調用方明確賦值。因此不需要由接受方明確賦值。可以將數群組類型的 ref 參數更改為調用的結果。例如,可以為數組賦以 null

對C和C++語言記憶體的理解

文章目錄   一、對內的分配  二、虛擬記憶體  三、記憶體的使用  四、記憶體bug

改善C#程式的50種方法 條款2:運行時常量(readonly)優於編譯時間常量(const)

C#語言有兩種不同的常量機制:一種為編譯時間 (compile-time)常量,一種為運行時(runtime)常量。兩種常量有著非常迥異的行為,使用不正確會導致程式的效能下降或者出現錯誤。這 兩種代價,哪一個都沒有人願意承擔,但是如果必須承擔一個,那麼“慢、但是能夠正確啟動並執行”程式總比“快、但是可能出錯的”程式要好。因此,我們說運行時 常量優於編譯時間常量。編譯時間常量比運行時常量稍微快一點,但卻缺乏靈活性。只有在效能非常關鍵,並且其值永遠不會改變的情況下,我們才應該使用編譯時間常

改善C#程式的50種方法 條款3:操作符is或as優於強制轉型

C#是一門強型別語言。一般情況下,我們最好避免 將一個類型強制轉換為其他類型。但是,有時候運行時類型檢查是無法避免的。相信大家都寫過很多以System.Object類型為參數的函數,因為. NET架構預先為我們定義了這些函數的簽名。在這些函數內部,我們經常要把那些參數向下轉型為其他類型,或者是類,或者是介面。對於這種轉型,我們通常有 兩種選擇:使用as操作符,或者使用傳統C風格的強制轉型。另外還有一種比較保險的做法:先使用is來做一個轉換測試,然後再使用as操作符或者強制轉

改善C#程式的50種方法 條款7:將實值型別儘可能實現為具有常量性和原子性的類型

具有常量性的類型很簡單,它們自建立後便保持不 變。如果在構造的時候就驗證了參數的有效性,我們就可以確保從此之後它都處於有效狀態。因為我們不可能再更改其內部狀態。通過禁止在構建對象之後更改對 象狀態,我們實際上可以省卻許多必要的錯誤檢查。具有常量性的類型同時也是安全執行緒的:多個reader可以訪問同樣的內容。因為如果內部狀態不可能改 變,那麼不同線程也就沒有機會獲得同一資料的不同值。具有常量性的類型也可以安全地暴露給外界,因為調用者不可能改變對象的內部狀態。具有常量性的類型在

改善C#程式的50種方法 條款6:明辨實值型別和參考型別的使用場合

 實值型別還是參考型別?結構還是類?如何正確地使用它們?這裡不是C++,在那裡,所有的類型都被我們定義為實值型別,然後我們可以選擇建立它們的引用形式。這也不是Java,在那裡,所有的類型都是參考型別[9]。 在C#中,我們必須在設計類型的時候就決定類型執行個體的行為。這種決定非常重要。我們必須清楚這種決定的後果,因為後期的更改會導致許多代碼在不經意間出現

改善C#程式的50種方法 條款5:總是提供ToString()方法

System.Object.ToString ()恐怕是.NET中最常用的方法了。應該為我們的類的所有客戶代碼提供一個合理的版本,否則這些代碼就只能使用我們的類的一些屬性來自己定製可讀的表示 了。類型的字串表示非常有用,可以在很多地方向使用者顯示對象的有關資訊,例如在Windows Forms上、Web Forms上、控制台輸出視窗中,以及調試環境中。為此,我們建立的每一個類型都應該重寫Object類的ToString()方法。如果建立的是更複雜

改善C#程式的50種方法 條款4:使用Conditional特性代替#if條件編譯

#if/#endif 條件編譯常用來由同一份原始碼產生不同的結果檔案,最常見的有debug版和release版。但是,這些工具在具體應用中並不是非常得心應手,因為它們 太容易被濫用了,使用它們建立的代碼通常都比較難理解,且難以調試。C#語言的設計者們對這種問題的解決方案是建立更好的工具,以達到為不同環境建立不同 機器碼的目的。C#為此添加了一個Conditional特性,該特性可以標示出某種環境設定下某個方法是否應該被調用。使用這種方式來描述條件編譯要比

【C#.NET】RichTextBox控制項中各行文本顯示不同顏色

目的:在RichTextBox中顯示多個人的聊天記錄,每個人的話用不同顏色的文本顯示。實現方法:        public void disply(RichTextBox rtBox, string strInput, Color fontColor, Color backColor)        {            rtBox.AppendText(strInput + "/r/n");            int p1 = rtBox.Text.IndexOf(strInput)

常用的C#Regex

常用的C#Regex! 文章來源: 視點設計 8see.net http://blog.8see.net/"^/d+$" //非負整數(正整數 + 0) "^[0-9]*[1-9][0-9]*$" //正整數 "^((-/d+)|(0+))$" //非正整數(負整數 + 0) "^-[0-9]*[1-9][0-9]*$" //負整數 "^-?/d+$" //整數 "^/d+(/./d+)?$" //非負浮點數(正浮點數 + 0) "^(([0-9]+/.[0-9]*[1-9][0-9]*)|([

C#讀取裝置資訊

 取得裝置網卡的MAC地址和硬碟的卷標號using System;using System.Management;namespace NetCard{    ///    /// 讀取裝置    ///     public class run    {        private ManagementClass mc;        private ManagementObjectCollection moc;        private ManagementObject disk;   

用Visual C#製作新聞閱讀器

一、弄清結構再動手  要想輕鬆的抽取RSS資訊,自然先要瞭解它的結構,所謂“知己知彼,百戰不殆”嘛。

C# 控制Windows服務的啟動與關閉

  // ...... using System.ServiceProcess; // ...... /// <summary> /// Restart windows service /// </summary> /// <param name="serviceName">the windows service display name</param> ///

C# winform 和Webform 給DataGridView 和DataView 添加行號

以前用過的,總結下,以免忘記了,也給廣大網友一個參考:1. C# winform DataGridView 添加行號private void GridView1_Paint(object sender, PaintEventArgs e)        {            int irowcount = this.GridView1.DisplayedRowCount(true);            if (irowcount == 0) return;           

改善C#程式的50種方法 條款8:確保0為實值型別的有效狀態

.NET系統的預設初始化機制會將所有的對象設定為0[14]。對於實值型別來講,我們無法阻止其他程式員將其所有的成員都初始化為0[15]。因此,我們應該將0作為實值型別的預設值。枚舉類型就是一種典型的情況。我們建立的枚舉類型決不應該將0視為無效狀態。我們知道,所有的枚舉類型都繼承自System.ValueType。預設的枚舉值從0開始,但是我們可以更改這種預設行為。public enum Planet{  // 顯式賦值。  // 否則將預設從0開始。  Mercury = 1,  Venus =

C# 快速(二分法)排序

快速(二分法)排序的思想是將數組劃分為兩邊,以某個節點v為界(設這個節點的值為 v),在節點v左邊的所有元素都小於 v, 在節點v右邊的所有元素都大於v.這樣不停地劃分,到最後整個數組就是有序的了。 具體分成兩邊的思路為(起始下標為start, 結束下標為 end):選擇v = a[end]作為中介點先從start開始掃描,遇到a[++i] < v停下來,接著從end開始掃描a[--j] >

【.NET】C#中遍曆各類資料集合的方法

來自  C#中遍曆各類資料集合的方法,這裡自己做下總結: 1.枚舉類型//遍曆枚舉類型Sample的各個枚舉名稱foreach (string sp in Enum.GetNames(typeof(Sample))){ary.Add(sp);}//遍曆枚舉類型Sample的各個枚舉值foreach (string sp in

【STL】C++語言ctime庫

1. 類型clock_t: 是個long型,用來記錄一段時間內的時鐘計時單元數,即CPU的運行單元時間。size_t: 標準C庫中定義的,應為unsigned int,在64位系統中為long unsigned int。time_t: 從1970年1月1日0時0分0秒到該時間點所經過的秒數。struct tm {  int tm_sec;       /* 秒 – 取值區間為[0,59] */  int tm_min;       /* 分 - 取值區間為[0,59] */  int

【STL】C++語言cstring庫之memcpy與memcpy_s

// void *memcpy(void *dest, const void *src, size_t count);// errno_t memcpy_s(void *dest, size_t numberOfElements, const void *src, size_t count);void test_memcpy_string(){char *s = "Golden Global View";char d1[19], d2[10], d3[19], d4[10];// 1.

【c++ primer】第九章 記憶體模型和名稱空間

一,單獨編譯        1)請不要將函數定義或變數聲明放到標頭檔中。               原因:一個標頭檔中包含一個函數定義,然後其他兩個檔案(同屬於一個程式)包含該標頭檔,則同一個程式中將包含同一個函數定義。除非函數是內聯的(inline),否則將出錯。        2)將結構放在標頭檔中是可以的。因為它們不建立變數。        3)標頭檔寫法: “main.h”  標頭檔包含在雙引號中則編譯器首先尋找當前的工作目錄。                             

總頁數: 4314 1 .... 4185 4186 4187 4188 4189 .... 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.