รหัส C # ไม่ปลอดภัย
เมื่อบล็อกของรหัสโดยใช้แท็กปรับปรุงไม่ปลอดภัย, C # ช่วยให้การใช้ตัวแปรชี้ในฟังก์ชั่นรหัสที่ไม่ปลอดภัยหรือรหัสที่ไม่มีการจัดการคือการใช้ตัวแปรชี้รหัสบล็อก
ตัวแปรชี้
ตัวชี้เป็นค่าตัวแปรที่อยู่ของตัวแปรอื่นคือที่อยู่ตรงกับที่ตั้งหน่วยความจำเช่นเดียวกับตัวแปรอื่น ๆ หรือค่าคงที่คุณต้องใช้ตัวชี้ก่อนอื่นจัดเก็บตัวแปรประกาศตัวชี้อยู่
รูปแบบทั่วไปของการประกาศตัวแปรชี้คือ
ประเภท var ชื่อ;
ต่อไปนี้เป็นคำประกาศชี้ที่ถูกต้อง:
int * IP; / * จุดจำนวนเต็ม * / คู่ * DP; / * ตัวชี้ไปยังหมายเลขแม่นยำสอง * / ลอย * FP; / * ชี้ไปลอย * / char * CH / * ชี้ไปยังถ่าน * /
ตัวอย่างต่อไปนี้แสดงให้เห็นถึงการใช้งานของ C #ใช้ปรับปรุงไม่ปลอดภัยเมื่อตัวชี้:
การใช้ระบบ namespace UnsafeCodeApplication { Program รุ่น { คงไม่ปลอดภัยเป็นโมฆะ main (String args []) { int var = 20; int * p = & var; Console.WriteLine ( "ข้อมูลเป็น: {0}" var); Console.WriteLine ( "ที่อยู่คือ: {0}" (int) P); Console.ReadKey (); } } }
เมื่อโค้ดข้างต้นจะรวบรวมและดำเนินการก็จะก่อให้เกิดผลลัพธ์ต่อไปนี้:
ข้อมูลเป็น: 20 ที่อยู่: 99215364
คุณไม่สามารถประกาศวิธีการทั้งหมดเป็นรหัสที่ไม่ปลอดภัยเพียงส่วนหนึ่งของความต้องการที่จะประกาศวิธีการที่เป็นรหัสที่ไม่ปลอดภัย ตัวอย่างต่อไปนี้แสดงให้เห็นถึงจุดนี้
การดึงข้อมูลโดยใช้ค่าตัวชี้
คุณสามารถใช้ToString () วิธีการของข้อมูลอ้างอิงตำแหน่งที่เก็บไว้ในตัวแปรชี้การดึงตัวอย่างต่อไปนี้แสดงให้เห็นถึงจุดนี้:
การใช้ระบบ namespace UnsafeCodeApplication { Program รุ่น { ประชาชนเป็นโมฆะคง Main () { ไม่ปลอดภัย { int var = 20; int * p = & var; Console.WriteLine ( "ข้อมูลเป็น: {0}" var); Console.WriteLine ( "ข้อมูลเป็น: {0}" p-> ToString ()); Console.WriteLine ( "ที่อยู่คือ: {0}" (int) P); } Console.ReadKey (); } } }
เมื่อโค้ดข้างต้นจะรวบรวมและดำเนินการก็จะก่อให้เกิดผลลัพธ์ต่อไปนี้:
ข้อมูลเป็น: 20 ข้อมูลเป็น: 20 ที่อยู่: 77128984
ผ่านตัวชี้เป็นวิธีการพารามิเตอร์
คุณสามารถส่งผ่านตัวแปรชี้เป็นพารามิเตอร์กับวิธีการของวิธีการที่ ตัวอย่างต่อไปนี้แสดงให้เห็นถึงจุดนี้:
การใช้ระบบ namespace UnsafeCodeApplication { ระดับ TestPointer { ประชาชนที่ไม่ปลอดภัยเป็นโมฆะแลกเปลี่ยน (int * p, q int *) { int อุณหภูมิ = * p; * * * * * * * * p = Q; * q = อุณหภูมิ; } ประชาชนไม่ปลอดภัย static void Main () { TestPointer p = TestPointer ใหม่ (); int var1 = 10; int var2 = 20; * int x = & var1; int * Y = & var2; Console.WriteLine ( "ก่อน Swap: var1: {0} var2: {1}" var1, var2); p.swap (x, y); Console.WriteLine ( "หลังจาก Swap: var1: {0} var2: {1}" var1, var2); Console.ReadKey (); } } }
เมื่อโค้ดข้างต้นจะรวบรวมและดำเนินการก็จะก่อให้เกิดผลลัพธ์ต่อไปนี้:
ก่อนที่จะ Swap: var1: 10 var2: 20 หลังจาก Swap: var1: 20, var2: 10
ใช้ตัวชี้การเข้าถึงองค์ประกอบมากมาย
ใน C # ชื่ออาร์เรย์และชี้ไปยังข้อมูลอาร์เรย์ที่มีประเภทข้อมูลเดียวกันเป็นตัวชี้ไปยังตัวแปรชนิดที่แตกต่างกัน ยกตัวอย่างเช่น int * P และ int [] P เป็นชนิดที่แตกต่างกัน คุณสามารถเพิ่ม P ตัวแปรชี้เพราะมันจะไม่คงที่ในหน่วยความจำ แต่ที่อยู่ของอาร์เรย์ได้รับการแก้ไขในหน่วยความจำเพื่อให้คุณไม่สามารถเพิ่ม P อาร์เรย์
ดังนั้นถ้าคุณจำเป็นต้องใช้ตัวแปรตัวชี้ในการเข้าถึงข้อมูลอาร์เรย์ที่เรามักจะทำใน C หรือ C ++เป็นคำหลักที่จะใช้ตัวชี้คงที่คงที่
ตัวอย่างต่อไปนี้แสดงให้เห็นถึงจุดนี้:
การใช้ระบบ namespace UnsafeCodeApplication { ระดับ TestPointer { ประชาชนไม่ปลอดภัย static void Main () { int [] รายการ = {10, 100, 200}; คงที่ (int * PTR = รายการ) / * จอแสดงผลตัวชี้อยู่อาร์เรย์ * / for (int i = 0; i <3; i ++) { Console.WriteLine ( "ที่อยู่ของรายการ [{0}] = {1}" ผม (int) (PTR + i)); Console.WriteLine ( "ค่าของรายการ [{0}] = {1}" ผม * (PTR + i)); } Console.ReadKey (); } } }
เมื่อโค้ดข้างต้นจะรวบรวมและดำเนินการก็จะก่อให้เกิดผลลัพธ์ต่อไปนี้:
ที่อยู่ของรายการ [0] = 31627168 มูลค่าของรายการ [0] = 10 ที่อยู่ของรายการ [1] = 31627172 มูลค่าของรายการ [1] = 100 ที่อยู่ของรายการ [2] = 31627176 มูลค่าของรายการ [2] = 200
รวบรวมรหัสที่ไม่ปลอดภัย
เพื่อที่จะรวบรวมรหัสที่ไม่ปลอดภัยคุณต้องสลับไปเรียบเรียงบรรทัดคำสั่งระบุ/ บรรทัดคำสั่งที่ไม่ปลอดภัย
ยกตัวอย่างเช่นการรวบรวมโปรแกรมที่เรียกว่า prog1.cs มีรหัสที่ไม่ปลอดภัยป้อนคำสั่งที่บรรทัดคำสั่ง:
CSC / prog1.cs ที่ไม่ปลอดภัย
หากคุณกำลังใช้ Visual Studio IDE, คุณต้องเปิดใช้รหัสที่ไม่ปลอดภัยในคุณสมบัติของโครงการ
ดำเนินการดังนี้
- โดย Explorer (Explorer โซลูชัน) แอตทริบิวต์ (คุณสมบัติ)โหนดับเบิลคลิกเปิดคุณสมบัติโครงการ (คุณสมบัติของโครงการ)
- คลิกที่แท็บสร้าง
- เลือกตัวเลือก"ให้รหัสที่ไม่ปลอดภัย"