آبجی
13th February 2010, 01:11 PM
اعضای internal در #C (در VB.NET با کلمه ی کلیدی Friend مشخص میشه) فقط در اسمبلی جاری قابل دسترسی هستند.
گاهی اوقات ممکنه نیاز داشته باشید که یک اسمبلی به یک اعضای یک اسمبلی دیگه که اجزای اون از نوع internal هستند دسترسی داشته باشه.
مایکروسافت دو دلیل رو بدین منظور ذکر کرده:
۱) اگر تست آزمایش واحد (Unit Testing) انجام میدید و متدهایی که به منظور Unit Testing استفاده میشن در یک اسمبلی دیگه قرار دارند و باید به اجزای یک اسمبلی که اجزای اون از نوع internal هستند دسترسی داشته باشند.
۲) اگر اجزای مرتبط به هم از یک Class Library در دو اسمبلی مختلف قرار دارند که حداقل یکی از اونها از نوع internal باشند.
در این حالت می تونید از از خصیصه ی InternalsVisibleTo استفاده کنید و کلاس یا عضو مورد نظر رو به عنوان عضوی که می تونه توسط یک اسمبلی خاص مورد استفاده قرار بگیره معرفی کنید:
[assembly: InternalsVisibleTo("AssemblyB")]
internal class AssemblyA
{
public void Test()
{
MessageBox.Show(”i’m a friend member!”);
}
}
در کدهای فوق، فقط اسمبلی با نام “AssemblyB” می تونه به اجزای اسمبلی با نام “AssemblyA” دسترسی داشته باشه.
موفق باشید.
گاهی اوقات ممکنه نیاز داشته باشید که یک اسمبلی به یک اعضای یک اسمبلی دیگه که اجزای اون از نوع internal هستند دسترسی داشته باشه.
مایکروسافت دو دلیل رو بدین منظور ذکر کرده:
۱) اگر تست آزمایش واحد (Unit Testing) انجام میدید و متدهایی که به منظور Unit Testing استفاده میشن در یک اسمبلی دیگه قرار دارند و باید به اجزای یک اسمبلی که اجزای اون از نوع internal هستند دسترسی داشته باشند.
۲) اگر اجزای مرتبط به هم از یک Class Library در دو اسمبلی مختلف قرار دارند که حداقل یکی از اونها از نوع internal باشند.
در این حالت می تونید از از خصیصه ی InternalsVisibleTo استفاده کنید و کلاس یا عضو مورد نظر رو به عنوان عضوی که می تونه توسط یک اسمبلی خاص مورد استفاده قرار بگیره معرفی کنید:
[assembly: InternalsVisibleTo("AssemblyB")]
internal class AssemblyA
{
public void Test()
{
MessageBox.Show(”i’m a friend member!”);
}
}
در کدهای فوق، فقط اسمبلی با نام “AssemblyB” می تونه به اجزای اسمبلی با نام “AssemblyA” دسترسی داشته باشه.
موفق باشید.