SlideShare a Scribd company logo
8- Memory management and Pointers
Outlines 
مقدمة  
إدارة الذاكرة تحت المجهر  
Type Value أنواع القيمة  
Reference Type أنواع المرجع  
Garbage Collector جامع النفايات  
.NET تحرير الموارد غير المُدارة من قبل  
Unsafe Code الشيفرة غير الآمنة  
05 2 تشرين الثاني، 14
مقدمة 
وهذه الشيفرة تحظر علينا )Managed Code ( لنا ما يُسمى بالشيفرة المُدارة .NET تؤمن  
.)Reference( التعامل بشكل مباشر مع الذاكرة من خلال ما يُعرف بالمرجع 
. Heap , Stack قد نحتاج إلى معرفة عميقة إلى كيفية الحجز الذاكري ضمن المناطق  
آلية عمل جامع النفايات .  
كيفية تحرير الموارد الغير مُدارة مثل الملفات المفتوحة أو اتصالات قواعد المعطيات المفتوحة .  
. C# كيفية استخدام المؤشرات في لغة  
05 3 تشرين الثاني، 14
إدارة الذاكرة تحت المجهر 
أنها لا تتُعب المبرمج في تفاصيل C# مثل .NET من أهم مزايا اللغات التي تعمل تحت منصة  
إدارة الذاكرة وكيفية حجز الأغراض وتحريرها . 
يوفر على المبرمج عناء تحرير المناطق المحجوزة )Collector Garbage ( جامع النفايات  
من قِبَل البرنامج في الذاكرة 
سنتكلم عن الفرق بين أنواع القيمة وأنواع المرجع  
Reference Data Type Vs Value Data Type  
05 4 تشرين الثاني، 14
Type Value أنواع القيمة 
يحوي المكدس :  
المتحولات المحلية .  
بارمترات الاستدعاءات للتوابع .  
المتحولات الستاتيكية .  
أي )LIFO( وهو بنية معطيات تعتمد على القاعدة التالية )Stack( المكدس  
.)Last In First Out( 
هي Struct و البنى Primitive Data Type كل الأنماط البسيطة  
وتحفظ ضمن المكدس . value Type 
05 5 تشرين الثاني، 14
Type Value أنواع القيمة 
{ 
int intval = 10; 
double doubleval = 300.0; 
} 
@80000 
0 
@79999 
9 
@79999 
8 
@79999 
7 
@79999 
6 
@79999 
5 
@79999 
4 
حجز 
05 6 تشرين الثاني، 14
Type Value أنواع القيمة 
{ 
int intval = 10; 
double doubleval = 300.0; 
} 
@80000 
0 
@79999 
9 
@79999 
8 
@79999 
7 
@79999 
6 
@79999 
5 
@79999 
4 
تحرير 
نلاحظ أن عملية حجز 
المتحولات والأغراض ضمن 
المكدس هي عملية سريعة جد ا 
05 7 تشرين الثاني، 14
Reference Type أنواع المرجع 
المكدس يعطينا وصول سريع جداً للمتحولات  
.)Heap( لكن المكدس هو عبارة عن منطقة صغيرة مقارنةً بالكومة  
. Class is Reference Type  
Reference Type يُعامل معاملة ال New أي غرض يتم حجزه عن طريق التعليمة  
في المكدس وهذا المرجع هو عبارة عن عنوان الغرض ) Reference( يتم تخزين المرجع  
. Heap ضمن الذاكرة 
05 8 تشرين الثاني، 14
Reference Type أنواع المرجع 
Student s = new Student(); 
Stack 
Heap 
s Object 
Reference is 
Read only 
Pointer 
05 9 تشرين الثاني، 14
Garbage Collector جامع النفايات 
{ 
List<int> Arr = new List<int>(); 
} 
يحرره المترجم من المكدس(. ( Arr والذي هو Reference يموت ال Scope عند الخروج من ال  
. )Heap( لكن الغرض الحقيقي موجود في الكومة  
يصبح هذا الغرض من دون أي مؤشر يؤشر عليه.  
يؤشر عليها Reference شبه ممتلئة فتقوم بحذف كل الأغراض التي ليس لها Heap عندما تصبح الذاكر GC تعمل  
في المكدس. 
05 10 تشرين الثاني، 14
Garbage Collector جامع النفايات 
. Heap للمنطقة )Compact( بعملية ضغط GC يقوم  
تحوي كل الأغراضالمحجوزة بشكل Heap باالتالي تصُبح المنطقة  
متسلسل ومتلاصق من دون أي مساحات ضائعة 
.Managed Heap  
بشكل قسري لكن لا يوجد أي شيء يضمن لنا أنها ستعمل GC يمكننا تشغيل ال  
باللحظة التي نريدها ! 
System.GC.Collect(); 
In use 
Free 
In use 
In use 
Free 
05 11 تشرين الثاني، 14
دارة من قبل 
ُ 
.NET تحرير الموارد غير الم 
يريح المبرمج من عناء تحرير الذاكرة المحجوزة . GC  
لا تعرف كيف تقوم بتحرير الموارد الغير مُدارة . GC لكن  
يحوي مرجع إلى غرض غير مُدار . لكي نجعل نقوم )Class( عندما يكون لدينا صف معين  
قبل إزالة الغرض من الذاكرة. )Unmanaged Resources( بتحرير الموارد غير المُدارة 
لدينا طريقتان :  
ضمن الصف )Destructor or FinalizerMethod( نقوم بالتصريح عن تابع هادم  
IDisposable استخدام الواجهة  
استخدام كلا الطريقتين .  
05 12 تشرين الثاني، 14
التصريح عن تابع هادم ضمن الصف: 
.GC الهادم هو المكان المناسب للقيام بعملية التنظيف قبل هدم الغرض من قبل  
//Implementation for free Unmanaged Resources used Directly by an Object: Examples : 
يتم استدعاء الهادم عند هدم الغرض فوراً . c++ في  
class Myclass 
{ 
~Myclass() 
{ 
// Closing connection To DB 
// Closing Opened Files 
// Closing Networking Connections 
أما في فأننا نعتمد على لهذا السبب لا نعرف متى سيتم استدعاء  
الهادم وتحرير } 
GC الغرض C# } 
.GC عن طريق 
تنفيذ كود الهادم يبطئ من عملية تحرير الذاكرة بسبب وجود كود إضافي للهادم يتم استدعاءه من  
قبل هدم الغضر فعليا من الذاكرة . GC قبل 
05 13 تشرين الثاني، 14
IDisposable استخدام الواجهة 
الطريقة الموصى بها من قبل مايكروسوفت لتحرير الموارد غير المُدارة لتجنب المشاكل  
.GC المتعلقة باستخدام 
يمكننا تحقيق هذه الطريقة كما يلي .  
يزودنا بتحكم دقيق Dispose المنهج  
class Myclass :IDisposable 
{ 
public void Dispose() 
{ 
//Implementation for free Unmanaged Resources used Directly by an Object: Examples : 
// Closing connection To DB 
// Closing Opened Files 
// Closing Networking Connections 
} 
} 
Myclass a = new Myclass(); 
//Do Processing 
a.Dispose(); 
05 14 تشرين الثاني، 14
دارة من قبل 
ُ 
.NET تحرير الموارد غير الم 
الحل الآمن هو كما يلي :  
قد يكون مربكا لبعض الأشخاص . Dispose لكن استدعاء المنهج  
التي تضمن لنا استدعاء تلقائي لهذا المنهج. using يمكننا استخدام التعليمة  
Myclass a=null; 
try 
{ 
a= new Myclass(); 
//Do Processing 
} 
finally 
{ 
if (a != null) 
a.Dispose(); 
} 
using (Myclass a=new Myclass()) 
{ 
//Do Processing 
} 
05 15 تشرين الثاني، 14
استخدام كلا الطريقتين : 
)Destructor( تنفيذ الهادم  
آلية أمنه ولكنها بطيئة وغير حتمية  
IDisposable تحقيق الواجهة  
) Dispose آلية حتمية لكنها تتطلب مجهود إضافي )استدعاء المنهج  
الطريقة الأفضل هي تحقيق كلا الطريقتين السابقتين  
05 16 تشرين الثاني، 14
 
class Myclass :IDisposable 
{ 
private bool isDisposed = false; 
public void Dispose() 
{ 
//Implementation for free Unmanaged Resources used Directly by an Object: Examples : 
Console.WriteLine("Disposing"); 
Dispose(true); //Cleaning managed and unmanaged Resources 
//Requests that the system not call the finalizer(Destructor) for the specified object 
GC.SuppressFinalize(this); 
} 
protected virtual void Dispose(bool disposing) 
{ 
if (!isDisposed) 
{ 
if (disposing) 
{ 
//Cleaning Magnaged objects by Calling Their Dispose() Methods ( Release Then Run GC) 
} 
//Cleaning Unmagnaged Resources 
} 
isDisposed = true; 
} 
05 17 تشرين الثاني، 14
استخدام كلا الطريقتين : 
هذا الكود يصلح لنوعين من المبرمجين :  
الأول يكتب : 
أما الثاني فيكتب : 
~Myclass() 
{ 
Dispose(false);//Cleaning Unmanaged Resources 
Console.WriteLine("Destructor"); 
} 
} 
Myclass a=null; 
try 
{ 
a= new Myclass(); 
//Do Processing 
} 
finally 
{ 
if (a != null) 
a.Dispose(); 
} 
{ 
Myclass a = new Myclass(); 
//Do Processing 
} 
05 18 تشرين الثاني، 14
Unsafe Code الشيفرة غير الآمنة 
قد نضطر في بعض الأحيان إلى الوصول المباشر إلى الذاكرة )استخدام مؤشرات( مثلا :  
وهذا )C/C++ مكتوب بلغة ( )Unmanaged DLL( غير مُدار DLL تابع موجود في ملف  
الوصول يتطلب تمرير مؤشر كبارمتر لهذا التابع . 
تحسين الأداء .  
05 19 تشرين الثاني، 14
كتابة شيفرة غير آمنة 
والتي تخبر المترجم بأن هذا المنهج يستخدم مؤشرات. unsafe تقوم الكلمة  
. Class,struct يمكن استخدامها مع ال  
unsafe class Myclass 
{ 
int* px ; //Declaration of a Pointer filed in a Class 
كما يمُكننا كتابة كتلة من الشيفرة غير الآمنة ضمن منهج عادي  
unsafe int GetNumber() 
{ 
//Code That can use Pointer 
int x = 10; 
int* px = &x; 
return 1; 
} 
// Any Method in This Class Can now use Pointers 
} 
static void Main(string[] args) 
{ 
Unsafe int* px; // Wrong and Generate Compiler Error 
unsafe 
{ 
//Unsafe Code That uses Pointers Here 
} 
//More safe Code That deose't use Pointers 
} 
05 20 تشرين الثاني، 14

More Related Content

Similar to 8 memory managment & pointers

المختصر السريع فى البرمجة غرضية التوجية فى Php
المختصر السريع فى البرمجة غرضية التوجية فى Phpالمختصر السريع فى البرمجة غرضية التوجية فى Php
المختصر السريع فى البرمجة غرضية التوجية فى Php
Prmigo
 
الدرس الثاني في تقنيات وبرمجة الاجهزة الذكية
الدرس الثاني في تقنيات وبرمجة الاجهزة الذكيةالدرس الثاني في تقنيات وبرمجة الاجهزة الذكية
الدرس الثاني في تقنيات وبرمجة الاجهزة الذكية
Mo7amm8d
 
لغة البرمجة سكالا
لغة البرمجة سكالالغة البرمجة سكالا
لغة البرمجة سكالا
Mounir Benhalla
 
الموضوعات الموقع
الموضوعات الموقعالموضوعات الموقع
الموضوعات الموقع
guest14c7e5
 

Similar to 8 memory managment & pointers (14)

Algorithms and Data Structure 2020
Algorithms and Data Structure 2020Algorithms and Data Structure 2020
Algorithms and Data Structure 2020
 
المختصر السريع فى البرمجة غرضية التوجية فى Php
المختصر السريع فى البرمجة غرضية التوجية فى Phpالمختصر السريع فى البرمجة غرضية التوجية فى Php
المختصر السريع فى البرمجة غرضية التوجية فى Php
 
6 ado.net
6 ado.net6 ado.net
6 ado.net
 
Deadlock
DeadlockDeadlock
Deadlock
 
الدرس الثاني في تقنيات وبرمجة الاجهزة الذكية
الدرس الثاني في تقنيات وبرمجة الاجهزة الذكيةالدرس الثاني في تقنيات وبرمجة الاجهزة الذكية
الدرس الثاني في تقنيات وبرمجة الاجهزة الذكية
 
لغة البرمجة سكالا
لغة البرمجة سكالالغة البرمجة سكالا
لغة البرمجة سكالا
 
java script course دورة جافا سكربت باللغة العربية
java script course دورة جافا سكربت باللغة العربيةjava script course دورة جافا سكربت باللغة العربية
java script course دورة جافا سكربت باللغة العربية
 
الحزم و التحزيم في سلاكوير
الحزم و التحزيم في سلاكويرالحزم و التحزيم في سلاكوير
الحزم و التحزيم في سلاكوير
 
بالعربيةAngular js(ar)تحميل كتاب دورة لتعلم
بالعربيةAngular js(ar)تحميل كتاب دورة لتعلم بالعربيةAngular js(ar)تحميل كتاب دورة لتعلم
بالعربيةAngular js(ar)تحميل كتاب دورة لتعلم
 
Angular js دورة
Angular js دورةAngular js دورة
Angular js دورة
 
موقع ملزمتي - مراجعة ليلة الامتحان حاسب آلي للصف الثاني الثانوي الترم الثاني
موقع ملزمتي - مراجعة ليلة الامتحان حاسب آلي للصف الثاني الثانوي الترم الثانيموقع ملزمتي - مراجعة ليلة الامتحان حاسب آلي للصف الثاني الثانوي الترم الثاني
موقع ملزمتي - مراجعة ليلة الامتحان حاسب آلي للصف الثاني الثانوي الترم الثاني
 
computer exam2
computer exam2computer exam2
computer exam2
 
1
11
1
 
الموضوعات الموقع
الموضوعات الموقعالموضوعات الموقع
الموضوعات الموقع
 

More from Mohammad Alyan

10 system.security.cryptography
10 system.security.cryptography10 system.security.cryptography
10 system.security.cryptography
Mohammad Alyan
 

More from Mohammad Alyan (13)

Blue ocean strategy arabic
Blue ocean strategy arabicBlue ocean strategy arabic
Blue ocean strategy arabic
 
Apple case study
Apple case studyApple case study
Apple case study
 
Introduction to Industry Life Cycles
 Introduction to Industry Life Cycles  Introduction to Industry Life Cycles
Introduction to Industry Life Cycles
 
Crowd funding
Crowd fundingCrowd funding
Crowd funding
 
Coursera
CourseraCoursera
Coursera
 
Course index
Course indexCourse index
Course index
 
التفكير- مصنع للإبداع
التفكير- مصنع للإبداعالتفكير- مصنع للإبداع
التفكير- مصنع للإبداع
 
Cloud computing
Cloud computing Cloud computing
Cloud computing
 
Linq introduction
Linq introductionLinq introduction
Linq introduction
 
10 system.security.cryptography
10 system.security.cryptography10 system.security.cryptography
10 system.security.cryptography
 
10 1 otp all
10 1 otp all10 1 otp all
10 1 otp all
 
5 fifth lesson -xml
5 fifth lesson -xml5 fifth lesson -xml
5 fifth lesson -xml
 
Coursera
CourseraCoursera
Coursera
 

8 memory managment & pointers

  • 1. 8- Memory management and Pointers
  • 2. Outlines مقدمة  إدارة الذاكرة تحت المجهر  Type Value أنواع القيمة  Reference Type أنواع المرجع  Garbage Collector جامع النفايات  .NET تحرير الموارد غير المُدارة من قبل  Unsafe Code الشيفرة غير الآمنة  05 2 تشرين الثاني، 14
  • 3. مقدمة وهذه الشيفرة تحظر علينا )Managed Code ( لنا ما يُسمى بالشيفرة المُدارة .NET تؤمن  .)Reference( التعامل بشكل مباشر مع الذاكرة من خلال ما يُعرف بالمرجع . Heap , Stack قد نحتاج إلى معرفة عميقة إلى كيفية الحجز الذاكري ضمن المناطق  آلية عمل جامع النفايات .  كيفية تحرير الموارد الغير مُدارة مثل الملفات المفتوحة أو اتصالات قواعد المعطيات المفتوحة .  . C# كيفية استخدام المؤشرات في لغة  05 3 تشرين الثاني، 14
  • 4. إدارة الذاكرة تحت المجهر أنها لا تتُعب المبرمج في تفاصيل C# مثل .NET من أهم مزايا اللغات التي تعمل تحت منصة  إدارة الذاكرة وكيفية حجز الأغراض وتحريرها . يوفر على المبرمج عناء تحرير المناطق المحجوزة )Collector Garbage ( جامع النفايات  من قِبَل البرنامج في الذاكرة سنتكلم عن الفرق بين أنواع القيمة وأنواع المرجع  Reference Data Type Vs Value Data Type  05 4 تشرين الثاني، 14
  • 5. Type Value أنواع القيمة يحوي المكدس :  المتحولات المحلية .  بارمترات الاستدعاءات للتوابع .  المتحولات الستاتيكية .  أي )LIFO( وهو بنية معطيات تعتمد على القاعدة التالية )Stack( المكدس  .)Last In First Out( هي Struct و البنى Primitive Data Type كل الأنماط البسيطة  وتحفظ ضمن المكدس . value Type 05 5 تشرين الثاني، 14
  • 6. Type Value أنواع القيمة { int intval = 10; double doubleval = 300.0; } @80000 0 @79999 9 @79999 8 @79999 7 @79999 6 @79999 5 @79999 4 حجز 05 6 تشرين الثاني، 14
  • 7. Type Value أنواع القيمة { int intval = 10; double doubleval = 300.0; } @80000 0 @79999 9 @79999 8 @79999 7 @79999 6 @79999 5 @79999 4 تحرير نلاحظ أن عملية حجز المتحولات والأغراض ضمن المكدس هي عملية سريعة جد ا 05 7 تشرين الثاني، 14
  • 8. Reference Type أنواع المرجع المكدس يعطينا وصول سريع جداً للمتحولات  .)Heap( لكن المكدس هو عبارة عن منطقة صغيرة مقارنةً بالكومة  . Class is Reference Type  Reference Type يُعامل معاملة ال New أي غرض يتم حجزه عن طريق التعليمة  في المكدس وهذا المرجع هو عبارة عن عنوان الغرض ) Reference( يتم تخزين المرجع  . Heap ضمن الذاكرة 05 8 تشرين الثاني، 14
  • 9. Reference Type أنواع المرجع Student s = new Student(); Stack Heap s Object Reference is Read only Pointer 05 9 تشرين الثاني، 14
  • 10. Garbage Collector جامع النفايات { List<int> Arr = new List<int>(); } يحرره المترجم من المكدس(. ( Arr والذي هو Reference يموت ال Scope عند الخروج من ال  . )Heap( لكن الغرض الحقيقي موجود في الكومة  يصبح هذا الغرض من دون أي مؤشر يؤشر عليه.  يؤشر عليها Reference شبه ممتلئة فتقوم بحذف كل الأغراض التي ليس لها Heap عندما تصبح الذاكر GC تعمل  في المكدس. 05 10 تشرين الثاني، 14
  • 11. Garbage Collector جامع النفايات . Heap للمنطقة )Compact( بعملية ضغط GC يقوم  تحوي كل الأغراضالمحجوزة بشكل Heap باالتالي تصُبح المنطقة  متسلسل ومتلاصق من دون أي مساحات ضائعة .Managed Heap  بشكل قسري لكن لا يوجد أي شيء يضمن لنا أنها ستعمل GC يمكننا تشغيل ال  باللحظة التي نريدها ! System.GC.Collect(); In use Free In use In use Free 05 11 تشرين الثاني، 14
  • 12. دارة من قبل ُ .NET تحرير الموارد غير الم يريح المبرمج من عناء تحرير الذاكرة المحجوزة . GC  لا تعرف كيف تقوم بتحرير الموارد الغير مُدارة . GC لكن  يحوي مرجع إلى غرض غير مُدار . لكي نجعل نقوم )Class( عندما يكون لدينا صف معين  قبل إزالة الغرض من الذاكرة. )Unmanaged Resources( بتحرير الموارد غير المُدارة لدينا طريقتان :  ضمن الصف )Destructor or FinalizerMethod( نقوم بالتصريح عن تابع هادم  IDisposable استخدام الواجهة  استخدام كلا الطريقتين .  05 12 تشرين الثاني، 14
  • 13. التصريح عن تابع هادم ضمن الصف: .GC الهادم هو المكان المناسب للقيام بعملية التنظيف قبل هدم الغرض من قبل  //Implementation for free Unmanaged Resources used Directly by an Object: Examples : يتم استدعاء الهادم عند هدم الغرض فوراً . c++ في  class Myclass { ~Myclass() { // Closing connection To DB // Closing Opened Files // Closing Networking Connections أما في فأننا نعتمد على لهذا السبب لا نعرف متى سيتم استدعاء  الهادم وتحرير } GC الغرض C# } .GC عن طريق تنفيذ كود الهادم يبطئ من عملية تحرير الذاكرة بسبب وجود كود إضافي للهادم يتم استدعاءه من  قبل هدم الغضر فعليا من الذاكرة . GC قبل 05 13 تشرين الثاني، 14
  • 14. IDisposable استخدام الواجهة الطريقة الموصى بها من قبل مايكروسوفت لتحرير الموارد غير المُدارة لتجنب المشاكل  .GC المتعلقة باستخدام يمكننا تحقيق هذه الطريقة كما يلي .  يزودنا بتحكم دقيق Dispose المنهج  class Myclass :IDisposable { public void Dispose() { //Implementation for free Unmanaged Resources used Directly by an Object: Examples : // Closing connection To DB // Closing Opened Files // Closing Networking Connections } } Myclass a = new Myclass(); //Do Processing a.Dispose(); 05 14 تشرين الثاني، 14
  • 15. دارة من قبل ُ .NET تحرير الموارد غير الم الحل الآمن هو كما يلي :  قد يكون مربكا لبعض الأشخاص . Dispose لكن استدعاء المنهج  التي تضمن لنا استدعاء تلقائي لهذا المنهج. using يمكننا استخدام التعليمة  Myclass a=null; try { a= new Myclass(); //Do Processing } finally { if (a != null) a.Dispose(); } using (Myclass a=new Myclass()) { //Do Processing } 05 15 تشرين الثاني، 14
  • 16. استخدام كلا الطريقتين : )Destructor( تنفيذ الهادم  آلية أمنه ولكنها بطيئة وغير حتمية  IDisposable تحقيق الواجهة  ) Dispose آلية حتمية لكنها تتطلب مجهود إضافي )استدعاء المنهج  الطريقة الأفضل هي تحقيق كلا الطريقتين السابقتين  05 16 تشرين الثاني، 14
  • 17.  class Myclass :IDisposable { private bool isDisposed = false; public void Dispose() { //Implementation for free Unmanaged Resources used Directly by an Object: Examples : Console.WriteLine("Disposing"); Dispose(true); //Cleaning managed and unmanaged Resources //Requests that the system not call the finalizer(Destructor) for the specified object GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { if (!isDisposed) { if (disposing) { //Cleaning Magnaged objects by Calling Their Dispose() Methods ( Release Then Run GC) } //Cleaning Unmagnaged Resources } isDisposed = true; } 05 17 تشرين الثاني، 14
  • 18. استخدام كلا الطريقتين : هذا الكود يصلح لنوعين من المبرمجين :  الأول يكتب : أما الثاني فيكتب : ~Myclass() { Dispose(false);//Cleaning Unmanaged Resources Console.WriteLine("Destructor"); } } Myclass a=null; try { a= new Myclass(); //Do Processing } finally { if (a != null) a.Dispose(); } { Myclass a = new Myclass(); //Do Processing } 05 18 تشرين الثاني، 14
  • 19. Unsafe Code الشيفرة غير الآمنة قد نضطر في بعض الأحيان إلى الوصول المباشر إلى الذاكرة )استخدام مؤشرات( مثلا :  وهذا )C/C++ مكتوب بلغة ( )Unmanaged DLL( غير مُدار DLL تابع موجود في ملف  الوصول يتطلب تمرير مؤشر كبارمتر لهذا التابع . تحسين الأداء .  05 19 تشرين الثاني، 14
  • 20. كتابة شيفرة غير آمنة والتي تخبر المترجم بأن هذا المنهج يستخدم مؤشرات. unsafe تقوم الكلمة  . Class,struct يمكن استخدامها مع ال  unsafe class Myclass { int* px ; //Declaration of a Pointer filed in a Class كما يمُكننا كتابة كتلة من الشيفرة غير الآمنة ضمن منهج عادي  unsafe int GetNumber() { //Code That can use Pointer int x = 10; int* px = &x; return 1; } // Any Method in This Class Can now use Pointers } static void Main(string[] args) { Unsafe int* px; // Wrong and Generate Compiler Error unsafe { //Unsafe Code That uses Pointers Here } //More safe Code That deose't use Pointers } 05 20 تشرين الثاني، 14