مردم جهان به دو دسته تقسیم می شوند دسته اول کسانی که موافقند مردم جهان به دو دسته تقسیم میشن و دسته دوم کسانی که مخالفند مردم جهان به دو دسته تقسیم میشن

وبلاگ آموزش سی شارپ

سلام خدمت همه شما دوستان عزیز که به من لطف داشتید و وبلاگ رو دنبال کردین...از مباحثی که قصد داشتم مطرح کنم
File,delegate,event
هنوز باقی مونده که احتمالاً تو تابستون می گم...شاید هم نگفتم هیچ وقت!:D
به هر حال ادامه آموزش رو تو درس ساختمان داده می گم! به آدرس زیر:
http://datastructurekelas.blogspot.com
تا اطلاع ثانوی موفق باشید!:D

۱۳۸۸ بهمن ۲, جمعه

indexer

سلام
بعد از یک امتحان آمار سنگین و نافرم ونا جور و غیره
اومدیم سراغ indexer
indexer چیه؟! به چه کاری میاد؟!
indexer یه چیزی مثل property ها هست از نظر تعریفی و کارش اینه که میذاره رو آرایه ای از شی ها و Object ها به طور مستقیم دسترسی داشته باشیم!
مثلاً وقتی یک آرایه 10 عنصری داشتیم وقتی می خواستیم مثلاً عنصر هفتم رو مقدار دهی کنیم با این فرض که اسم آرایه A باشه این کار رو می کردیم!
A[6]=78;
و دقیقاً همین کار رو برای Object ها با indexer ها انجام می دیم!
حالا indexer رو چه جوری تعریف می کنیم:
indexer مثل property تعریف میشه و set و get داره!
اول سطح دسترسی یا modifier رو تعریف می کنیم! بعد مقدار برگشتی یا return type و در آخر هم مقدار آرگومان ها در کنار کلمه index و در آخر هم set و get:
(modifier) (return type) this [(argument) index]
{
get
{
// Get codes goes here
}
set
{
// Set codes goes here
}
}
مثلاٌ:
private string []data = new string[5];
public string this [int index]
{
get
{
return data[index];
}
set
{
data[index] = value;
}
}
و این هم استفاده کردنش تو برنامه اصلی!
class program
{
public static void Main()
{
MyClass mc = new MyClass();
mc[0] = "Rajesh";
mc[1] = "A3-126";
mc[2] = "Snehadara";
mc[3] = "Irla";
mc[4] = "Mumbai";
Console.WriteLine("{0},{1},{2},{3},{4}",mc[0],mc[1],mc[2],mc[3],mc[4]);
}
}
برای کسایی که می خوان برنامه سازی پیشرفته امتحان بدن تا همین جا کافیه ولی برای کسایی که می خوان بیشتر بدونن:
indexer ها به ارث هم می رسن:
using System;
class Base
{
public int this[int indxer]
{
get
{
Console.Write("Base GET");
return 10;
}
set
{
Console.Write("Base SET");
}
}
}

class Derived : Base
{

...

..

.
}
class program

{
public static void Main()
{
Derived d1 = new Derived();
d1[0] = 10;
Console.WriteLine(d1[0]);
}
}

indexer ها رو میشه override کرد یعنی Polymorphism:

using System;

class Base
{
public virtual int this[int index]
{
get
{
Console.Write("Base GET");
return 10;
}
set
{
Console.Write("Base SET");
}
}
}

class Derived : Base
{
public override int this[int index]
{
get
{
Console.Write("Derived GET");
return 10;
}
set
{
Console.Write("Derived SET");
}
}
}

class program
{
public static void Main()
{
Base b1 = new Derived();
b1[0]= 10;
Console.WriteLine(b1[0]);
}
}
و از همه مهم تر میشه indexer ها رو Abstract هم تعریف کرد!

using System;

abstract class Abstract
{
public abstract int this[int index]
{
get;
set;
}
}

class Concrete : Abstract
{
public override int this[int index]
{
get
{
Console.Write(" GET");
return 10;
}
set
{
Console.Write(" SET");
}
}
}

class program
{
public static void Main()
{
Concrete c1 = new Concrete();
c1[0] = 10;
Console.WriteLine(c1[0]);
}
}

منبع کد ها: http://www.csharphelp.com/2006/04/-c-indexers/

۲ نظر:

  1. آخه چرا آدما اینقدر فرق میکنن؟ من سه بار آمارم رو گرفتم آخر سر استادم دلش برام سوخت بهم 10 داد!!! روم سیاه!
    بهر حال... من یه چیزایی دارم که تو نداری! دلت بسوزه!
    با کفر جدیدی به روزم!

    پاسخحذف
  2. هی یه چیزه جالب...کی توضیحات من در مورد indexer رو فهمیده؟! :D

    پاسخحذف