PDA

View Full Version : کلمه کلیدیunsafe برای چیست؟



alexmcse
سه شنبه 16 خرداد 1391, 17:02 عصر
کلمه کلیدی unsafe
برای چیست؟
لطفا مثال بزنید

hhsaffar
سه شنبه 16 خرداد 1391, 18:55 عصر
کلمه کلیدی unsafe محدوده‌ای رو مشخص میکنه که در اون میشه از پوینترها در C# استفاده کرد. مثلا

int a=5;
unsafe
{
int* p = &a;

(*p) = 10;
}

Console.WriteLine(a); //Output: 10

در C# از پوینترها برای دسترسی مستقیم به حافظه، بعضی موارد ارتباط برقرار کردن با سیستم عامل، و انجام سریع بعضی عملیاتها استفاده میشه. در کل اگر بسیار بسیار بسیار لازم نباشه و کاملا وارد نباشیم نباید سراغ برنامه نویسی unsafe رفت، چون هرگونه اشتباه ممکنه به سیستم آسیب بزنه. (همونطور که از اسمش مشخصه غیر امنه)
برای اطلاعات بیشتر:
http://msdn.microsoft.com/en-us/library/chfa2zb8(v=vs.100).aspx
http://www.codeproject.com/Articles/1099/Writing-Unsafe-code-using-C

Direlap
سه شنبه 16 خرداد 1391, 21:35 عصر
من یه جا یادمه که خونده بودم سی شارپ اشاره گر نداره .
خوب این امکانات از اول برای سی شارپ وجود داشت یا از کدوم ورژنش اضافه شده ؟

hhsaffar
سه شنبه 16 خرداد 1391, 22:00 عصر
تو گوگل بوکس کتابهایی مال سال 2000 یا 2002 پیدا میشه که به این موضوع اشاره کرده، ظاهرا از همون ورژنهای اولیه برای ارتباط با API قدیمیتر مورد نیاز بوده
مثلا اینجا (http://books.google.com/books?id=XYQruTc6_44C&lpg=PA14&dq=c%23%20unsafe&pg=PA14#v=onepage&q=c%23%20unsafe&f=false)

tooraj_azizi_1035
چهارشنبه 17 خرداد 1391, 16:44 عصر
سلام
برای دستیابی به type safety و امنیت C#‎‎ به طور پیش فرض، از عملیات محاسباتی روی اشاره گرها پشتیبانی نمی کند. اما با استفاده از کلمه کلیدی unsafe شما می توانید یک بدنه کد ناامن (unsafe context) که در آن اشاره گر ها می توانند استفاده شوند تعریف کنید. برای کامپایل برنامه حتماً باید از سوئیچ /unsafe استفاده کنید.
More:http://msdn.microsoft.com/en-us/library/t2yzs44b.aspx

// compile with: /unsafe class UnsafeTest { // Unsafe method: takes pointer to int: unsafe static void SquarePtrParam(int* p) { *p *= *p; } unsafe static void Main() { int i = 5; // Unsafe method: uses address-of operator (&): SquarePtrParam(&i); Console.WriteLine(i); } } // Output: 2