من می خوام که یه کلاس بسازم مثل زیر از اون استفاده کنم
class1.items(0).value()
یعنی یه چیزی مثل ListBox که وقتی ما می گیم
ListBox1.items(0).tostring()
که اطلاعاتی مربوط به آیتم 0 این ListBox را بر می گرداند
من می خوام که یه کلاس بسازم مثل زیر از اون استفاده کنم
class1.items(0).value()
یعنی یه چیزی مثل ListBox که وقتی ما می گیم
ListBox1.items(0).tostring()
که اطلاعاتی مربوط به آیتم 0 این ListBox را بر می گرداند
مس تونید یک Structure یا آزایه ای از جنس دلخواه در کلاستون تعریف کنید
دوستان لطف کنن یک مثال بزارن خواستم قبل از ایجاد این تاپیک این کار رو بکنم اما که نشد
ممنونم
آقای Mehralian ایکدی که نوشتی سره [] به من خطا می ده معلوم هست که غلطه یه کمی بهش نگاه کن تا تصصیح بشه لطفا (البته فکر کنم که باید [] به اول بیاد یعنی می شه
Class2[] itemes;
)
از دوستان دیگه که می خوان به من کمک کنن لطفا یه مثال کامل بزارن که من اونو توی کلاس خودم کپی کنم و جواب بگیرم (آخه من چیز زیادی در این زمینه نمی دونم)
در ضمن این رو هم بگید که من زمانی که میگم مثلا
class1.items[index].value
ما از کجا بفهمبم که index وارد شده چند است
با تشکر از همه
برای مثال اینو ببین
publicclassClass1
{
privateArrayList _items = newArrayList();
publicvoid Add(object obj)
{
_items.Add(obj);
}
publicArrayList items
{
get
{
return _items;
}
}
}
از این کلاس میتونی به شکل زیر استفاده کنی
string s="Hello";
Class1 objClass = newClass1();
objClass.Add(s);
string str = (string)objClass.items[0];
MessageBox.Show(str);
چون item از نوع ArrayList هست بنابراین با وارد کردن index به اون عضو از ArrayList دست پیدا میکنی
آقا من نمیدونم که بد توضیح میدم یا ...
من یه کلاسی میخوام بنویسم که شبیه همان چیزی که آقای عماد گفتند اما من میخوام چند تا آیتم به items اضافه کنم یعنی
که وقتی کاربری این کد رو درخواست کرد من اطلاعاتی راجع به ایتم 0 را که در items قرار دارد به او برگردانمList1.items[0].value
حالا امید وارم تونسته باشم منظورم روبرسونم
آقا من هم می گم چطوری لطفا یه مثال بزنید
بابا من خیلی وقت هست که میخوام یه تابع بنویسم و بخواطر این موظوع موندم
بگید چی کار کنم لطفا
شما یک کلاس میسازید که صفاتی مثل Value, Key و ... داشته باشه. بعد توی کلاس ListBox یک آرایه از اون رو تعریف میکنید.
کلاس Item باید ایندکسر باشه. به این شکل :Indexers permit instances of a class or struct to be indexed in the same way as arrays. Indexers are similar to properties except that their accessors take parameters.
http://www.developer.com/net/csharp/article.php/1547581
http://msdn2.microsoft.com/en-us/library/6x16t2tx(VS.71).aspx
...مرا به خانه ام ببر، اگرچه خانه؛ خانه نیست
آقا من راستش هنوز جواب نگرفتم(خیلی باید ...)
آقا ببینید من یه چیزی مثل این می خوام
حالا میای توی فرم تعریف می کنی
public class Parent
{
public int Getcount()
{
return 5;
}
public child items = new child();
}
public class child
{
}
MyMain.Parent p = new MyMain.Parent();الان شما
p.Getcount();میزنی و به چیزی بر می گردونه (مهم نیست)
اما حالا اون چیزی که من می خوام این هست که :
اولا tiems از نوع آرایه تعریف شود و ما بتوانیم یه سری Property به items اضافه کنیم (فکر کنم مبحث Inherits باشه) که ما هر کدوم از اون properties ها رو زدیم داخل اون properties تشخیص بده کا index وارد شده چند است و با توجه به index وارد شده یه سری اطلاعات برگردونه
مثلا در یه string آرایه ای اینجوری هست که :
string[] str =new string[10];ببینید در این حالت مقدار طول آرایه ای که index آن 3 است را بر می گرداند .
MessageBox.Show(str[3].Length.toString());
حالا اون چیزی که من می خوام اینه که مثلا یه تابع بنویسم که این کار رو بکنه
p.items[8].getValue();البته در خاتمه این رو هم بگم که ما نمونه ی این کار رو در DataSet هم داریم یعنی
که در این کد Count مربوط به table دوم را بر می گرداند یعنی باز هم index را تشخیص می دهد
Dataset ds=new Dataset();
ds.tables[2].rows.count();
امیدوارم تونسته باشم منظورم رو برسونم
فعلا بای
سورس کد رو توی ضمیمه اضافه کردم میتونید دانلود کنید.
class Parent
{
private List<Child> items = new List<Child>();
public List<Child> Items
{
get { return items; }
set { items = value; }
}
public Parent()
{
}
public void AddItems(string _text)
{
Child child = new Child();
child.Text = _text;
items.Add(child);
}
}
public class Child
{
public int Length
{
get { return this.Text.Length; }
}
private string text;
public string Text
{
get { return text; }
set { text = value; }
}
}
...مرا به خانه ام ببر، اگرچه خانه؛ خانه نیست
البته من اول منظور شما رو اشتباه متوجه شده بودم تو این مورد نیازی به ایندکسر نیست.
private void Form1_Load(object sender, EventArgs e)
{
Parent p = new Parent();
p.AddItems("Salam!");
Child child = new Child();
child.Text="Hello dear!";
p.Items.Add(child);
MessageBox.Show(p.Items[0].Length.ToString());
MessageBox.Show(p.Items[1].Length.ToString());
}
...مرا به خانه ام ببر، اگرچه خانه؛ خانه نیست
...مرا به خانه ام ببر، اگرچه خانه؛ خانه نیست
برای تشخیص ایندکس باید از ایندکسر استفاده کنید و برای استفاده از Collection ها، همانطور که sinpin اشاره داشتند، میتونید یک فیلد از نوع Collection تعریف کنید یا یکی از Collection های موجود را ارث بری کنید.نوشته شده توسط MShirzadi
برای تشخیص عدد ایندکسر... مثلا:
class A
{
private object o;
public object this[int index]
{
get
{
if(index != 0) return null;
return this.o;
}
set
{
if(index != 0) return;
this.o = value;
}
}
}
و استفاده:
A a = new A();
a[0] = "A";
Console.WriteLine((string)a[0]);
که فقط میشه عدد 0 رو به ایندکسر ارسال کرد.