آموزش منطق و مقدمات برنامه نویسی به همراه الگوریتم و فلوچارت آموزش منطق و مقدمات برنامه نویسی به همراه الگوریتم و فلوچارت

آموزشگاه برنامه نویسی تحلیل‌داده

با مجوز رسمی از سازمان فنی و حرفه‌ای کشور

ورود / ثبت‌نام

ورود کاربر جدید هستید؟ ثبت نام کنید
بستن تبلیغات
تسلط کامل بر سی‌شارپ با یک دوره پروژه‌محور

یادگیری سی شارپ از مفاهیم پایه تا پروژه محور: شی‌گرایی، کار با SQL و LINQ، ORMها (Entity Framework)، ساخت پروژه مدیریت رستوران با گزارشات حرفه‌ای و امکانات کامل!

مشاهده بیشتر
تسلط جامع بر MVC Core برای توسعه وب حرفه‌ای

یادگیری MVC Core از مبانی تا پیشرفته: شی‌گرایی، Routing، Entity Framework، امنیت، تست یونیت، Razor، Ajax، و پروژه‌های کاربردی! یک دوره کامل برای تسلط بر توسعه وب با ASP.NET Core. به صورت حضوری و آنلاین!

مشاهده بیشتر

Indexer در C#

Indexer در C#

با کمک Indexer ها می‌توان اشیاء را مانند یک آرایه ایندکس کرد. زمانی که Indexer ی را برای کلاسی تعریف می‌کنید این کلاس مانند یک آرایه‌ی مجازی رفتار می‌کند. بعد از این کار می‌توانید با استفاده از عملگر دسترسی آرایه ([]) به نمونه‌ی این کلاس دسترسی پیدا کنید.


سینتکس

یک Indexer تک بعدی دارای سینتکس زیر است:

element-type this[int index] {
// The get accessor.
get {
// return the value specified by index
}

// The set accessor.
set {
// set the value specified by index
}
}

استفاده از Indexer ها

اعلان رفتار یک Indexer تا حدی شبیه به یک ویژگی انجام می‌شود. مشابه با ویژگی‌ها، برای تعریف کردن Indexer ها نیز شما باید از اکسسورهای get و set استفاده کنید. با این حال ویژگی‌ها عضو داده‌ای مشخصی را برگشت می‌دهند و یا تنظیم می‌کنند. این در حالی است که Indexer ها مقدار مشخصی از نمونه‌ی شیء را برگشت می‌دهند و یا تنظیم می‌کنند. به بیان دیگر Indexer نمونه داده را به بخش‌های کوچک‌تر تقسیم کرده، هر یک از بخش‌ها را ایندکس می‌کند و سپس آن‌ها را دریافت یا ارسال می‌کند.
هنگام تعریف کردن ویژگی‌ها باید اسم ویژگی را فراهم کرد. Indexer ها نه به کمک اسم بلکه به کمک با استفاده از واژه‌ی کلیدی this تعریف می‌شوند. این واژه‌ی کلیدی به نمونه‌ی شیء اشاره دارد. در مثال زیر به این مفهوم پرداخته شده است:

using System;
namespace IndexerApplication {

class IndexedNames {
private string[] namelist = new string[size];
static public int size = 10;

public IndexedNames() {
for (int i = 0; i < size; i++)
namelist[i] = "N. A.";
}
public string this[int index] {
get {
string tmp;

if(index >= 0 && index <= size-1) {
tmp = namelist[index];
} else {
tmp = "";
}

return (tmp);
}
set {
if(index >= 0 && index <= size-1) {
namelist[index] = value;
}
}
}
static void Main(string[] args) {
IndexedNames names = new IndexedNames();
names[0] = "Zara";
names[1] = "Riz";
names[2] = "Nuha";
names[3] = "Asif";
names[4] = "Davinder";
names[5] = "Sunil";
names[6] = "Rubic";

for (int i = 0; i < IndexedNames.size; i++) {
Console.WriteLine(names[i]);
}
Console.ReadKey();
}
}
}

زمانی که کد بالا کامپایل و اجرا می‌شود، نتیجه‌ی زیر نمایش داده می‌شود:

Zara
Riz
Nuha
Asif
Davinder
Sunil
Rubic
N. A.
N. A.
N. A.

Indexer های با بار بیش از حد

Indexer ها می‌توانند بیش از ظرفیت خود بار حمل کنند. همچنین آن‌ها می‌توانند با کمک چندین پارامتر به گونه‌ای که هر یک از این پارامترها نوع متفاوتی داشته باشند، اعلان شوند. الزامی وجود ندارد که ایندکس‌ها عدد صحیحی باشند. با کمک C# می‌توان نوع دیگری را برای ایندکس‌ها انتخاب کرد، مانند یک رشته.
در مثال زیر Indexer های با بار بیش از حد نشان داده شده‌اند:

using System;
namespace IndexerApplication {
class IndexedNames {
private string[] namelist = new string[size];
static public int size = 10;

public IndexedNames() {
for (int i = 0; i < size; i++) {
namelist[i] = "N. A.";
}
}
public string this[int index] {
get {
string tmp;

if(index >= 0 && index <= size-1) {
tmp = namelist[index];
} else {
tmp = "";
}

return (tmp);
}
set {
if(index >= 0 && index <= size-1) {
namelist[index] = value;
}
}
}

public int this[string name] {
get {
int index = 0;

while(index < size) {
if (namelist[index] == name) {
return index;
}
index++;
}
return index;
}
}
static void Main(string[] args) {
IndexedNames names = new IndexedNames();
names[0] = "Zara";
names[1] = "Riz";
names[2] = "Nuha";
names[3] = "Asif";
names[4] = "Davinder";
names[5] = "Sunil";
names[6] = "Rubic";

//using the first indexer with int parameter
for (int i = 0; i < IndexedNames.size; i++) {
Console.WriteLine(names[i]);
}

//using the second indexer with the string parameter
Console.WriteLine(names["Nuha"]);
Console.ReadKey();
}
}
}

زمانی که کد بالا کامپایل و اجرا می‌شود، نتیجه به صورت زیر نمایش داده می‌شود:

Zara
Riz
Nuha
Asif
Davinder
Sunil
Rubic
N. A.
N. A.
N. A.
2

1403/03/24 4441 1900
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما
برای ارسال سوال لازم است، ابتدا وارد سایت شوید.