อัปเดต String ด้วย Pointer

Note

String เป็น immutable type ที่ไม่มี public api สำหรับแก้ไขข้อมูล เราจึงไม่สามารถเปลี่ยนค่าใน memory ที่เก็บ string ได้ ในกรณีที่มีการ assign ค่าใหม่ CLR จะสร้าง string ชุดใหม่เก็บใน memory ตำแหน่งใหม่

Pointer

ใน C# ไม่มี type ไหนเป็น immutable ที่สมบูรณ์ เนื่องจากเราสามารถใช้ pointer เข้าถึงตำแหน่งใน memory ได้โดยตรง การใช้ pointer ใน C# ต้องทำใน unsafe block เท่านั้น

ตัวอย่าง

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Test {
public static string T() {
string s = "cat";
unsafe {
fixed (char* i = s) {
*i = 'b';
char* p2 = i + 1;
*p2 = 'o';
}
}
return s;
}
}
Test.T(); // bot