File Access Modifier چیست؟
👈 در این مقاله درباره Access Modifier (اصلاح کننده دسترسی) File یادمیگیریم، و میفهمیم که چه مشکلی رو حل میکنه.
👁 بازدید : 148
1403/3/30 | 11:20 : تاریخ 📆
File Access Modifier چیست؟
همینطور که میدونید کارایی access mofifierها در نحوه دسترسی و نمایش به کلاس و ممبر کلاسها تاثیر داره. در سیشارپ 11، اکسس مودیفایر جدیدی معرفی شد به نام file.یعنی کلاسی که اکسس مودیفایر file داشته باشه فقط در همون فایل که ایجاد شده قابل دسترس و دیدن هست.بیایید تو یک مثال ببینیم :
کارایی File Access Modifier
در record، struct، enum، delegate، interface، classe و record structs میتونیم از اکسس مودیفایر file استفاده کنیم.
فرض کنید میخواهیم پیام به کاربران ارسال کنیم، یکی از طریق وتسپ و یکی با تلگرام و همچنین لاگ مربوط به ارسال پیام هم ثبت شود.یعنی چهار کلاس در یک نیم اسپیس:
namespace SendMessageToUsers;
public static class WhatsAppService
{
public static string SendMessage(DateTime datetime, string username, string message)
{
Logger.GetMessage(datetime, fileId);
return $"dear {username}: {message}";
}
}
public static class Logger
{
public static void SetLog(DateTime datetime, string username, string message)
{
File.WriteAllText(path, $"{datetime} - Sent message to user {username}- Message: {message}");
}
}
و ...
namespace SendMessageToUsers;
public static class TelegramService
{
public static string SendMessage(DateTime datetime, string username, string message)
{
Logger.GetMessage(datetime, fileId);
return $"dear {username}: {message}";
}
}
public static class Logger
{
public static void SetLog(DateTime datetime, string username, string message)
{
File.WriteAllText(path, $"{datetime} - Sent message to user {username}- Message: {message}");
}
}
حالا با این شرایط ما خطای کامپایلری دریافت میکنیم، چرا که کلاس Logger که public هم هست دوبار تکرار شده و متهای یکسان با پارامتر یکسان دارند.
Error CS0101 The namespace 'Content' already contains a definition for 'Logger.'
حالا برای حل این مشکل فقط کافیه اکسس مودیفایر public یکی از دو کلاس(یا هر دو کلاس) Logger رو به file تغییر بدیم، حالا خطای کامپایلر برطرف شده و کلاس WhatsAppService و TelegramService از Logger لوکال خودشون استفاده میکنن.
نتیجه:
اکسس مودیفایر file به صورت لوکال کلاس مورد استفاده قرار میگیره و دیگه لازم نیست نگران تشابه نام باشیم.
File Access Modifier چیست؟
همینطور که میدونید کارایی access mofifierها در نحوه دسترسی و نمایش به کلاس و ممبر کلاسها تاثیر داره. در سیشارپ 11، اکسس مودیفایر جدیدی معرفی شد به نام file.یعنی کلاسی که اکسس مودیفایر file داشته باشه فقط در همون فایل که ایجاد شده قابل دسترس و دیدن هست.بیایید تو یک مثال ببینیم :
کارایی File Access Modifier
در record، struct، enum، delegate، interface، classe و record structs میتونیم از اکسس مودیفایر file استفاده کنیم.
فرض کنید میخواهیم پیام به کاربران ارسال کنیم، یکی از طریق وتسپ و یکی با تلگرام و همچنین لاگ مربوط به ارسال پیام هم ثبت شود.یعنی چهار کلاس در یک نیم اسپیس:
namespace SendMessageToUsers;
public static class WhatsAppService
{
public static string SendMessage(DateTime datetime, string username, string message)
{
Logger.GetMessage(datetime, fileId);
return $"dear {username}: {message}";
}
}
public static class Logger
{
public static void SetLog(DateTime datetime, string username, string message)
{
File.WriteAllText(path, $"{datetime} - Sent message to user {username}- Message: {message}");
}
}
و ...
namespace SendMessageToUsers;
public static class TelegramService
{
public static string SendMessage(DateTime datetime, string username, string message)
{
Logger.GetMessage(datetime, fileId);
return $"dear {username}: {message}";
}
}
public static class Logger
{
public static void SetLog(DateTime datetime, string username, string message)
{
File.WriteAllText(path, $"{datetime} - Sent message to user {username}- Message: {message}");
}
}
حالا با این شرایط ما خطای کامپایلری دریافت میکنیم، چرا که کلاس Logger که public هم هست دوبار تکرار شده و متهای یکسان با پارامتر یکسان دارند.
Error CS0101 The namespace 'Content' already contains a definition for 'Logger.'
حالا برای حل این مشکل فقط کافیه اکسس مودیفایر public یکی از دو کلاس(یا هر دو کلاس) Logger رو به file تغییر بدیم، حالا خطای کامپایلر برطرف شده و کلاس WhatsAppService و TelegramService از Logger لوکال خودشون استفاده میکنن.
نتیجه:
اکسس مودیفایر file به صورت لوکال کلاس مورد استفاده قرار میگیره و دیگه لازم نیست نگران تشابه نام باشیم.
هنوز دیدگاهی ثبت نشده