دسته بندی مقالات
- بیشتر -محصولات
- بیشتر -آخرین مقالات
- بیشتر --
Class Library در سی شارپ
1404/01/10 -
دستور BREAK در پایگاه داده sql
1404/01/02 -
دستور CONTINUE در پایگاه داده SQL
1404/01/01 -
دستور WAITFOR در پایگاه داده SQL
1403/12/26 -
دستور GOTO در پایگاه داده SQL
1403/12/25 -
حلقه WHILE در پایگاه داده SQL
1403/12/24
سطح دسترسی Protected Internal در سی شارپ

سطح دسترسی Protected Internal در سی شارپ
در سیشارپ، سطح دسترسی protected internal ترکیبی از protected و internal است.
این سطح دسترسی به این معناست که اعضای کلاس فقط در همان اسمبلی (پروژه) یا در کلاسهای مشتقشده (فرزند) قابل دسترسی هستند.
در واقع، اگر یک کلاس خارج از اسمبلی باشد، تنها در صورتی میتواند به این اعضا دسترسی داشته باشد که از کلاس اصلی ارثبری کرده باشد.
این ویژگی باعث میشود تا کلاسهای مرتبط در یک پروژه، بدون افشای جزئیات به کدهای خارجی، بتوانند از دادههای مشترک استفاده کنند.
این سطح دسترسی معمولاً در مواقعی استفاده میشود که بخواهیم قابلیت ارثبری را برای کلاسهای فرزند فراهم کنیم، اما دسترسی را فقط به محدوده همان اسمبلی محدود کنیم.
بهعنوان مثال:
public class Parent {
protected internal void ShowMessage() {
Console.WriteLine("Accessible within assembly and derived classes.");
}
}
class Child : Parent {
public void Display() {
ShowMessage(); // مجاز است چون کلاس فرزند است
}
}
در این مثال، متد ShowMessage در همان اسمبلی برای کلاسهای مشتقشده و سایر کلاسها قابلدسترسی است، اما از خارج اسمبلی فقط کلاسهای فرزند میتوانند از آن استفاده کنند.
مزایای سطح دسترسی protected internal
-
دسترسی ترکیبی
اعضا در همان اسمبلی و در کلاسهای مشتقشده در اسمبلیهای دیگر قابل دسترسی هستند. -
افزایش انعطافپذیری
اجازه میدهد که کلاسهای فرزند از اعضای محافظتشده استفاده کنند، بدون اینکه دسترسی عمومی داده شود. -
بهبود کپسولهسازی
از افشای غیرضروری دادهها جلوگیری میکند و فقط به کلاسهای مرتبط امکان استفاده میدهد. -
قابلیت استفاده در لایهبندی پروژه
مناسب برای پروژههایی که دارای چندین ماژول هستند و نیاز دارند که کلاسهای داخلی ارتباط داشته باشند. -
کنترل بهتر امنیت کد
باعث میشود که فقط کلاسهای مشخصشده در محدودههای کنترلشده به اعضا دسترسی داشته باشند.
ترکیب دو سطح دسترسی
زمانی که از Protected Internal استفاده میکنیم، اعضای کلاس برای:
-
کلاسهای مشتق شده (حتی در اسمبلیهای مختلف) قابل دسترسی خواهند بود.
-
در داخل همان اسمبلی نیز قابل دسترسی هستند.
این سطح دسترسی به برنامهنویسان این امکان را میدهد که از اعضای کلاس بهطور خاص در محیطهای داخلی (داخل اسمبلی) استفاده کنند و همچنین اجازه دهند که کلاسهای مشتق شده خارج از اسمبلی نیز به این اعضا دسترسی داشته باشند.
مثال:
using System;
namespace AccessModifiersExample
{
// کلاس پایه با سطح دسترسی Protected Internal
public class BaseClass
{
// عضو Protected Internal
protected internal int protectedInternalValue = 100;
// متد برای نمایش مقدار protectedInternalValue
public void DisplayValue()
{
Console.WriteLine($"Protected Internal Value: {protectedInternalValue}");
}
}
// کلاس مشتق شده از BaseClass
public class DerivedClass : BaseClass
{
// دسترسی به protectedInternalValue از کلاس BaseClass
public void AccessProtectedInternal()
{
Console.WriteLine($"Accessing Protected Internal Value from Derived Class: {protectedInternalValue}");
}
}
class Program
{
static void Main(string[] args)
{
// ایجاد شیء از کلاس پایه
BaseClass baseObj = new BaseClass();
baseObj.DisplayValue(); // دسترسی به protectedInternalValue از طریق متد عمومی در BaseClass
// ایجاد شیء از کلاس مشتق شده
DerivedClass derivedObj = new DerivedClass();
derivedObj.AccessProtectedInternal(); // دسترسی به protectedInternalValue از کلاس مشتق شده
// از خارج از کلاس (درون اسمبلی) هم میتوان به protectedInternalValue دسترسی داشت
// فرض بر این است که همه در همان اسمبلی قرار دارند.
}
}
}
در این مثال:
کلاس BaseClass دارای یک عضو با سطح دسترسی Protected Internal به نام protectedInternalValue است.
کلاس DerivedClass که از BaseClass مشتق شده است، میتواند به این عضو دسترسی پیدا کند.
درون متد DisplayValue() در BaseClass و متد AccessProtectedInternal() در DerivedClass، به این عضو دسترسی داده شده است.
آیا به دنبال یک فرصت عالی برای یادگیری برنامهنویسی هستید؟ 🚀
با دوره آموزشی سیشارپ ما، شما میتوانید مهارتهای خود را به سطح جدیدی ارتقا دهید! این دوره بهطور کامل طراحی شده تا به شما کمک کند تا از مبتدی تا پیشرفته در دنیای برنامهنویسی سیشارپ پیش بروید.
👨🏫 چرا دوره ما را انتخاب کنید؟
- محتوای جامع و عملی: با پروژههای واقعی و تمرینات عملی، یادگیری را به تجربهای جذاب تبدیل کنید.
- مدرس مجرب: از تجربه و دانش مدرس حرفهای بهرهمند شوید که شما را در هر مرحله از یادگیری راهنمایی میکنند.
- پشتیبانی ۲۴/۷: هر زمان که سوالی داشتید، ما در کنار شما خواهیم بود تا به شما کمک کنیم.
- دسترسی مادامالعمر: به محتوای دوره دسترسی دائمی داشته باشید و هر زمان که خواستید، میتوانید به آن مراجعه کنید.
💡 فرصت را از دست ندهید!
بایادگیری سیشارپ، میتوانید در دنیای فناوری اطلاعات به یک متخصص تبدیل شوید و در پروژههای جذاب و چالشبرانگیز شرکت کنید.
همین امروز به جمع یادگیرندگان ما بپیوندید و اولین قدم را به سوی آیندهای روشنتر بردارید!
شرکت در دوره آموزش برنامه نویسی سی شارپ
نکات مهم درباره Protected Internal
-
محدودیتها
یک نکته مهم این است که دسترسی به اعضای Protected Internal در کلاسهای غیر مشتق شده خارج از اسمبلی ممکن نیست. -
ترکیب Protected و Internal
ترکیب این دو سطح دسترسی باعث میشود که اعضای Protected Internal هم برای کلاسهای مشتق شده از سایر اسمبلیها و هم در داخل همان اسمبلی در دسترس باشند. -
استفاده در توسعه سیستمهای پیچیده
این سطح دسترسی در طراحی سیستمهایی که به طور پیچیده و در مقیاس بزرگ استفاده میشوند، مفید است.
مخصوصاً زمانی که نیاز به اشتراکگذاری دادهها و متدهای کلاسهای پایه با کلاسهای مشتق شده از دیگر اسمبلیها داریم.
کاربردهای Protected Internal در سی شارپ
سطح دسترسی Protected Internal در شرایط خاصی کاربرد دارد که نیاز به دسترسی محدود به اعضای یک کلاس هم در داخل اسمبلی و هم در کلاسهای مشتق شده در خارج از اسمبلی داریم.
این سطح دسترسی به ویژه در موارد زیر مفید است:
-
مدیریت دسترسی در سیستمهای بزرگ
زمانی که پروژههای بزرگی با چندین اسمبلی داریم و نیاز به مدیریت دقیق دسترسی به دادهها و متدها داریم. -
استفاده در کلاسهای پایه با قابلیت گسترش
زمانی که یک کلاس پایه داریم و میخواهیم اعضای آن هم در داخل اسمبلی و هم در کلاسهای مشتق شده از اسمبلیهای دیگر قابل دسترسی باشد. -
محافظت از اعضای مهم کلاسها
با استفاده از Protected Internal میتوانیم اعضای کلاسها را از دسترسیهای غیرمجاز محافظت کنیم، در حالی که هنوز به طور خاص در محیطهای مختلف قابل استفاده باشند.
مثال پروژه محور از سطح دسترسی Protected Internal
موضوع پروژه مدیریت کاربران
در این پروژه، کلاس UserManager به عنوان کلاس پایه است که ویژگیهای کاربران را مدیریت میکند.
کلاس PremiumUserManager از کلاس UserManager ارثبری میکند و دسترسی به ویژگیهای خاص کاربران را فراهم میکند.
کد کلاسهای پروژه
using System;
namespace UserManagementSystem
{
// کلاس پایه که شامل ویژگیها و متدهای مشترک برای کاربران است
public class UserManager
{
// ویژگی Protected Internal که فقط در کلاسهای مشتق شده و داخل اسمبلی قابل دسترسی است
protected internal string username;
protected internal string email;
// سازنده برای ایجاد یک کاربر
public UserManager(string username, string email)
{
this.username = username;
this.email = email;
}
// متد عمومی برای نمایش اطلاعات کاربر
public void DisplayUserInfo()
{
Console.WriteLine($"Username: {username}, Email: {email}");
}
}
// کلاس مشتق شده برای مدیریت کاربران ویژه
public class PremiumUserManager : UserManager
{
// ویژگی خاص برای کاربران ویژه
public string premiumFeature;
// سازنده برای ایجاد یک کاربر ویژه
public PremiumUserManager(string username, string email, string premiumFeature)
: base(username, email)
{
this.premiumFeature = premiumFeature;
}
// متد برای دسترسی به ویژگیهای ویژه کاربران
public void DisplayPremiumFeatures()
{
// دسترسی به ویژگی protected internal از کلاس پایه
Console.WriteLine($"Premium Feature for {username}: {premiumFeature}");
}
// نمایش اطلاعات کاربر همراه با ویژگیهای ویژه
public new void DisplayUserInfo()
{
base.DisplayUserInfo();
Console.WriteLine($"Premium Feature: {premiumFeature}");
}
}
class Program
{
static void Main(string[] args)
{
// ایجاد یک شیء از کلاس PremiumUserManager (کاربر ویژه)
PremiumUserManager premiumUser = new PremiumUserManager("JohnDoe", "john@example.com", "Ad-Free Experience");
// نمایش اطلاعات کاربر ویژه همراه با ویژگیهای ویژه
premiumUser.DisplayUserInfo();
premiumUser.DisplayPremiumFeatures();
// ایجاد یک شیء از کلاس UserManager (کاربر عادی)
UserManager regularUser = new UserManager("JaneDoe", "jane@example.com");
regularUser.DisplayUserInfo();
}
}
}
توضیح کد
در این پروژه کلاس UserManager شامل دو ویژگی username و email است که به صورت protected internal تعریف شدهاند.
این ویژگیها در داخل کلاسهای مشتق شده (مثل PremiumUserManager) و همچنین در داخل همان اسمبلی قابل دسترسی هستند.
کلاس PremiumUserManager از کلاس UserManager ارثبری میکند و یک ویژگی جدید به نام premiumFeature اضافه میکند.
این ویژگیها تنها در کلاسهای مشتق شده و در همان اسمبلی قابل دسترسی هستند.
در متد DisplayPremiumFeatures از کلاس PremiumUserManager، دسترسی به ویژگیهای protected internal کلاس UserManager انجام میشود.
نتیجه اجرای برنامه
زمانی که برنامه اجرا میشود، اطلاعات کاربران به صورت زیر نمایش داده میشود:
Username: JohnDoe, Email: john@example.com
Premium Feature: Ad-Free Experience
Premium Feature for JohnDoe: Ad-Free Experience
Username: JaneDoe, Email: jane@example.com
دوره های مرتبط

آموزش برنامه نویسی سی شارپ
زبان شی گرایی حرفه ای سی شارپ یک زبان قدرتمند برای طراحی نرم افزار به شمار میرود.