ورود

View Full Version : جلوگیری از دیدن مقادیر Property ها در دات‌نت



amir_saniyan
پنج شنبه 12 شهریور 1388, 23:08 عصر
با سلام

من قصد دارم در این پست نحوه «جلوگیری از دیدن مقادیر ویژگی‌ها (Property) در دات‌نت» رو توضیح بدم. حالا کجا می‌تونه استفاده بشه، بستگی به کار خودتون داره.

این کار خیلی ساده است، فقط کافیه که کد زیر رو به کلاس‌تون اضافه کنید:



public int _
{
get
{
Environment.FailFast(null);
return 0;
}
}


به همین سادگی :لبخند:

حالا یک مثال کامل:



// برنامه‌نویس: امیر سانیان
// amir_saniyan@yahoo.com

using System;

namespace AntiDebug
{
/// <summary>
/// این رده از دیدن مقادیر ویژگی‌ها در هنگام دیباگ
/// جلوگیری می‌کند.
/// </summary>
public class Test
{
/// <summary>
/// وظیفه این ویژگی محافظت در برابر دیدن مقدار
/// ویژگی‌ها در هنگام دیباگ است.
/// </summary>
public int _
{
get
{
Environment.FailFast(null);
return 0;
}
}
/// <summary>
/// تنها برای مثال.
/// </summary>
public string Property1
{
get
{
return "This is Property1";
}
}

/// <summary>
/// تنها برای مثال.
/// </summary>
public string Property2
{
get
{
return "This is Property2";
}
}

/// <summary>
/// سازنده.
/// </summary>
public Test()
{

}

/// <summary>
/// تنها برای مثال.
/// </summary>
public void Method1()
{
Console.WriteLine("This is Method1");
}
}

class Program
{
static void Main(string[] args)
{
// مثالی برای جلوگیری از دیباگ.
// ابتدا یک شی می‌سازیم.
Test test = new Test();

// حل در این مکان، یک نقطه شکست قرار دهید.
// سعی کنید با نگه داشتن موس روی رده تست
// مقادیر ویژگی‌های آن را ببینید.
// همانطور که مشاهده می‌کنید
// این مقادیر نشان داده نشده
// و بعد از مدتی ویژوال استدیو
// برنامه را متوقف می‌کند.
string str = test.Property1;

test.Method1();
}
}
}



پروژه ضمیمه شده.

موفق باشید.

amir_saniyan
پنج شنبه 12 شهریور 1388, 23:11 عصر
نمی‌دونم چرا کدها این قدر بد دیده می‌شوند؟
اما تکه اول اینطوریه:


public int _
{
get
{
Environment.FailFast(null);
return 0;
}
}

Mrs.Net
جمعه 13 شهریور 1388, 12:52 عصر
یعنی فقط در حالت trace کردن کاربرد داره؟!
میشه بیشتر توضیح بدید؟

solidilos
جمعه 13 شهریور 1388, 13:09 عصر
پروژه ات رو تو VS2008 تست کردم جواب نداد...میشه یه راهنمایی کنی...مرسی

amir_saniyan
شنبه 14 شهریور 1388, 09:20 صبح
سلام

گفتم کاربردش ممکنه خیلی وسیع نباشه اما به هر حال جلوی Trace رو تا حدی می‌گیره.
نکته‌اش اینجاست که به محض اینکه ویژوال استدیو یا هر دیباگر دیگه‌ای بخواد مقدار ویژگی _ رو نمایش بده (که برای این کار مجبور کد مخصوص ویژگی رو اجرا کنه) شروع به اجرای دستور Environment.FailFast می‌کنه که با اینکار عملا برنامه بدون تولید هیچ استثنایی روند اجرای خودش رو متوقف می‌کنه.

در مورد دوستی که گفته تو ویژوال استدیو 2008 کار نمی‌کنه باید بگم که اصلا پروژه با ویژوال استدیو 2008 نوشته شده و خودم تستش کردم. ممکنه که شما روی دستور string str = test.Property1 یک Break Point نمی‌گذارید و اگر گذاشتید احتمالا موس رو روی کلمه test نمی‌برید و اگر هم می‌برید احتمالا با ویژوال استدیو سعی نمی‌کنید همون زمان مقدار ویژگی‌های این کلاس رو ببینید و اگر می‌بینید احتمالا سریع خودتون برنامه رو قطع می‌کنید. :لبخند:

موفق و موید باشید