نمایش نتایج 1 تا 15 از 15

نام تاپیک: چطور باید این کلاس رو نوشت

  1. #1
    کاربر دائمی آواتار MShirzadi
    تاریخ عضویت
    آذر 1385
    محل زندگی
    تهران
    پست
    325

    چطور باید این کلاس رو نوشت

    من می خوام که یه کلاس بسازم مثل زیر از اون استفاده کنم

    class1.items(0).value()


    یعنی یه چیزی مثل ListBox که وقتی ما می گیم

    ListBox1.items(0).tostring()


    که اطلاعاتی مربوط به آیتم 0 این ListBox را بر می گرداند

  2. #2
    مس تونید یک Structure یا آزایه ای از جنس دلخواه در کلاستون تعریف کنید

  3. #3

    Smile

    نقل قول نوشته شده توسط MShirzadi مشاهده تاپیک
    من می خوام که یه کلاس بسازم مثل زیر از اون استفاده کنم

    class1.items(0).value()
    یعنی یه چیزی مثل ListBox که وقتی ما می گیم

    ListBox1.items(0).tostring()
    که اطلاعاتی مربوط به آیتم 0 این ListBox را بر می گرداند
    شما میتونید از یک collection در کلاستون استفاده کنید.
    مفهوم Indexer هم شاید مفید باشه.
    ...مرا به خانه ام ببر، اگرچه خانه؛ خانه نیست

  4. #4
    کاربر دائمی آواتار MShirzadi
    تاریخ عضویت
    آذر 1385
    محل زندگی
    تهران
    پست
    325
    دوستان لطف کنن یک مثال بزارن خواستم قبل از ایجاد این تاپیک این کار رو بکنم اما که نشد
    ممنونم

  5. #5
    کاربر دائمی آواتار MShirzadi
    تاریخ عضویت
    آذر 1385
    محل زندگی
    تهران
    پست
    325
    نقل قول نوشته شده توسط Mehralian مشاهده تاپیک
    class1 رو بسازید items رو از نوع آرایه یا arraylist داخل اون تهریف کنید.
    abstract public class class1
    {
    //statement
    class2 items[];
    }
    خاصیت valueی هم که استفاده کردین میتونه داخل class2 باشه.
    توضیح: اگه می خواین از روی class1 نمونه سازی بکنید باید کلمه abstract رو از خط اول حذف کنید.
    شکل صحیح فراخوانیشم اینجوریه:
    class1.items[0].value

    آقای Mehralian ایکدی که نوشتی سره [] به من خطا می ده معلوم هست که غلطه یه کمی بهش نگاه کن تا تصصیح بشه لطفا (البته فکر کنم که باید [] به اول بیاد یعنی می شه
    Class2[] itemes;

    )

    از دوستان دیگه که می خوان به من کمک کنن لطفا یه مثال کامل بزارن که من اونو توی کلاس خودم کپی کنم و جواب بگیرم (آخه من چیز زیادی در این زمینه نمی دونم)
    در ضمن این رو هم بگید که من زمانی که میگم مثلا
    class1.items[index].value

    ما از کجا بفهمبم که index وارد شده چند است
    با تشکر از همه

  6. #6
    کاربر دائمی
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    تهران
    پست
    1,486
    برای مثال اینو ببین

    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 دست پیدا میکنی

  7. #7
    کاربر دائمی آواتار MShirzadi
    تاریخ عضویت
    آذر 1385
    محل زندگی
    تهران
    پست
    325
    آقا من نمیدونم که بد توضیح میدم یا ...
    من یه کلاسی میخوام بنویسم که شبیه همان چیزی که آقای عماد گفتند اما من میخوام چند تا آیتم به items اضافه کنم یعنی
    List1.items[0].value
    که وقتی کاربری این کد رو درخواست کرد من اطلاعاتی راجع به ایتم 0 را که در items قرار دارد به او برگردانم
    حالا امید وارم تونسته باشم منظورم روبرسونم

  8. #8
    نقل قول نوشته شده توسط MShirzadi مشاهده تاپیک
    آقا من نمیدونم که بد توضیح میدم یا ...
    من یه کلاسی میخوام بنویسم که شبیه همان چیزی که آقای عماد گفتند اما من میخوام چند تا آیتم به items اضافه کنم یعنی
    که وقتی کاربری این کد رو درخواست کرد من اطلاعاتی راجع به ایتم 0 را که در items قرار دارد به او برگردانم
    حالا امید وارم تونسته باشم منظورم روبرسونم
    Items خودش میتونه یک کلاس و بصورت ایندکسر باشه.
    ...مرا به خانه ام ببر، اگرچه خانه؛ خانه نیست

  9. #9
    کاربر دائمی آواتار MShirzadi
    تاریخ عضویت
    آذر 1385
    محل زندگی
    تهران
    پست
    325
    آقا من هم می گم چطوری لطفا یه مثال بزنید
    بابا من خیلی وقت هست که میخوام یه تابع بنویسم و بخواطر این موظوع موندم
    بگید چی کار کنم لطفا

  10. #10
    شما یک کلاس میسازید که صفاتی مثل Value, Key و ... داشته باشه. بعد توی کلاس ListBox یک آرایه از اون رو تعریف میکنید.

    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.
    کلاس Item باید ایندکسر باشه. به این شکل :
    http://www.developer.com/net/csharp/article.php/1547581
    http://msdn2.microsoft.com/en-us/library/6x16t2tx(VS.71).aspx
    ...مرا به خانه ام ببر، اگرچه خانه؛ خانه نیست

  11. #11
    کاربر دائمی آواتار MShirzadi
    تاریخ عضویت
    آذر 1385
    محل زندگی
    تهران
    پست
    325
    آقا من راستش هنوز جواب نگرفتم(خیلی باید ...)
    آقا ببینید من یه چیزی مثل این می خوام

    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];
    MessageBox.Show(str[3].Length.toString());
    ببینید در این حالت مقدار طول آرایه ای که index آن 3 است را بر می گرداند .
    حالا اون چیزی که من می خوام اینه که مثلا یه تابع بنویسم که این کار رو بکنه
    p.items[8].getValue();
    البته در خاتمه این رو هم بگم که ما نمونه ی این کار رو در DataSet هم داریم یعنی

    Dataset ds=new Dataset();
    ds.tables[2].rows.count();
    که در این کد Count مربوط به table دوم را بر می گرداند یعنی باز هم index را تشخیص می دهد

    امیدوارم تونسته باشم منظورم رو برسونم
    فعلا بای

  12. #12
    سورس کد رو توی ضمیمه اضافه کردم میتونید دانلود کنید.

        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; }
    }
    }
    فایل های ضمیمه فایل های ضمیمه
    ...مرا به خانه ام ببر، اگرچه خانه؛ خانه نیست

  13. #13
    البته من اول منظور شما رو اشتباه متوجه شده بودم تو این مورد نیازی به ایندکسر نیست.

            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());
    }
    ...مرا به خانه ام ببر، اگرچه خانه؛ خانه نیست

  14. #14
    نقل قول نوشته شده توسط MShirzadi مشاهده تاپیک
    p.items[8].getValue();
    البته در خاتمه این رو هم بگم که ما نمونه ی این کار رو در DataSet هم داریم یعنی

    Dataset ds=new Dataset();
    ds.tables[2].rows.count();
    که در این کد Count مربوط به table دوم را بر می گرداند یعنی باز هم index را تشخیص
    در مورد مثالی که زدید :
    System.Data.DataTableCollection
    public sealed class DataTableCollection : System.Data.InternalDataCollectionBase
    Member of System.Data

    Summary:
    Represents the collection of tables for the System.Data.DataSet.
    ...مرا به خانه ام ببر، اگرچه خانه؛ خانه نیست

  15. #15
    کاربر دائمی آواتار PC2st
    تاریخ عضویت
    آذر 1385
    محل زندگی
    کرمانشاه
    سن
    38
    پست
    1,491
    نقل قول نوشته شده توسط MShirzadi
    که در این کد Count مربوط به table دوم را بر می گرداند یعنی باز هم index را تشخیص می دهد
    برای تشخیص ایندکس باید از ایندکسر استفاده کنید و برای استفاده از Collection ها، همانطور که sinpin اشاره داشتند، میتونید یک فیلد از نوع Collection تعریف کنید یا یکی از Collection های موجود را ارث بری کنید.

    برای تشخیص عدد ایندکسر... مثلا:

    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 رو به ایندکسر ارسال کرد.

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •