C#重點知識詳解(二) (轉)
第二章 管理
記憶體管理提供了與一樣的自動記憶體管理功能,讓員從繁重的記憶體管理中擺脫出來,記憶體管理提高了程式碼的質量和提高了開發。
c#限制了著指標的使用,免除了程式設計師對記憶體洩漏的煩惱,但是不是意味著向java程式設計師一樣c#程式設計師在也不能使用指標代來的好處。在設計C#語言時考慮到這個問題,在一方面拋棄指標的同時,另一方面採用折衷的辦法,透過一個標誌來時程式引入指標。
首先我們來了解自動記憶體管理
public class Stack
{
private Node first = null;
public bool Empty {
get {
return (first == null);
}
}
public Pop() {
if (first == null)
throw new Exception("Can't Pop from an empty Stack.");
else {
object temp = first.Value;
first = first.Next;
return temp;
}
}
public void Push(object o) {
first = new Node(o, first);
}
class Node
{
public Node Next;
public object Value;
public Node(object value): this(value, null) {}
public Node(object value, Node next) {
Next = next;
Value = value;
}
}
}
程式建立了一個stack類來實現一個鏈,使用一個push方法建立Node節點例項和一個當不再需要Node節點時的收集器。一個節點例項不能被任何程式碼訪問時,就被收集。例如當一個點元素被移出棧,相關的Node就被收集。
The example
class Test
{
static void Main() {
Stack s = new Stack();
for (int i = 0; i < 10; i++)
s.Push(i);
s = null;
}
}
關於指標的引用,c#中使用unsafe標誌來代表隊指標的引用。以下程式演示了指標的用法,不過由於使用指標,記憶體管理就不得不手工完成。
using System;
class Test
{
unsafe static void Locations(byte[] ar) {
fixed (byte *p = ar) {
byte *p_elem = p;
for (int i = 0; i < ar.Length; i++) {
byte value = *p_elem;
string addr = int.Format((int) p_elem, "X");
Console.WriteLine("arr[{0}] at 0x{1} is {2}", i, addr, value);
p_elem++;
}
}
}
static void Main() {
byte[] arr = new byte[] {1, 2, 3, 4, 5};
WriteLocations(ar);
}
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-988915/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Spring知識點詳解Spring
- 鴻蒙Navigation知識點詳解鴻蒙Navigation
- 執行緒池知識點詳解執行緒
- C#有關介面的語法知識詳解C#
- [01-jwt]C# JWT基礎知識詳解JWTC#
- java 重寫知識點Java
- Python知識點(二)Python
- HTTP和AJAX重點知識HTTP
- ASQ備考重點知識分享
- 詳解C#泛型(二)C#泛型
- vue知識點整理(轉發)Vue
- JavaScript進階知識點——函式和物件詳解JavaScript函式物件
- Android 加密知識詳解Android加密
- 10分鐘詳解Spring全家桶7大知識點Spring
- upload-labs通關詳解以及相關知識點
- 詳解C#特性和反射(二)C#反射
- jQuery第二章知識點jQuery
- 網頁高階知識點(二)網頁
- 二叉樹的知識點二叉樹
- web前端技巧-ES6新特性與重點知識彙總(二)Web前端
- Git基礎知識詳解Git
- Redis基礎知識詳解Redis
- react知識(二)重寫JSX編譯原理ReactJS編譯原理
- Mysql系列第二講 詳解mysql資料型別(重點)MySql資料型別
- 一萬三千字的HashMap面試必問知識點詳解HashMap面試
- 詳解C#委託和事件(二)C#事件
- 【詳解】WebSocket相關知識整理Web
- react的詳細知識講解!React
- C#中Linq的去重方式Distinct詳解C#
- HTML5學習重點知識:JavaScript概述HTMLJavaScript
- 《圖解HTTP》知識點摘錄圖解HTTP
- vertical-align知識點講解
- 玩轉javaScript---知識點彙總(3)JavaScript
- 玩轉javascript---知識點彙總(2)JavaScript
- 玩轉javascript---知識點彙總(1)JavaScript
- 資料庫知識點(2)——行轉列資料庫
- HTML+CSS知識點大雜燴(二)HTMLCSS
- HTTP 協議知識點總結(二)HTTPSHTTP協議
- 第二天知識點總結