ساختن اشیاء به طور نامحدود در #c

m_mx2009

Member
سلام دوباره به همه دوستان.

بنده یک کلاسی رو تعریف کردم و کاربر میتونه اشیائی از این نوع کلاس رو بسازه و یا تغییرشون بده.

سوالم اینه که چطور میشه تمام این کلاس ها رو در یک آرایه جمع آوری کرد ولی طوری که هرموقع کاربر شئ جدیدی از این نوع ساخت ، به اندیس آرایه یکی اضافه بشه بدون اینکه اطلاعات قبلی پاک بشه؟

یک دنیا ممنون!!:green:
 

iranpcl

New Member
سلام
اندیس آرایه یه چیز ثابتیه و قابل تغییر برای خود آرایه نیست
ولی اگر همینطوری فقط تعداد استفاده ها رو بخواید میتونید یک متغییر سراسری از نوع پابلیک تعریف کنید و به ازای هر تابع یک پلاس برای متغییر بدید(البته اگر منظورتون رو درست فهمیده باشم)
کمی بیشتر توضیح بدید
 

the_king

مدیرکل انجمن
سلام دوباره به همه دوستان.

بنده یک کلاسی رو تعریف کردم و کاربر میتونه اشیائی از این نوع کلاس رو بسازه و یا تغییرشون بده.

سوالم اینه که چطور میشه تمام این کلاس ها رو در یک آرایه جمع آوری کرد ولی طوری که هرموقع کاربر شئ جدیدی از این نوع ساخت ، به اندیس آرایه یکی اضافه بشه بدون اینکه اطلاعات قبلی پاک بشه؟

یک دنیا ممنون!!:green:

آرایه ساختار ساده ای داره که طبیعتا در کنار توانایی هاش محدودیت های زیادی هم هست.
ساده ترین راه حل اینه که بجای آرایه از لیست استفاده کنید که برای مدیریت کردن تعداد نامعلومی از اعضاء مناسبه.

یک مثال در برنامه کنسولی :
کد:
    class MyClass : IDisposable
    {
        static List<MyClass> objects = new List<MyClass>();
        private string name = "";

        public MyClass()
        {
            objects.Add(this);
        }

        public MyClass(string name)
        {
            this.name = name;
            objects.Add(this);
        }

        ~MyClass()
        {
            Dispose();
        }

        public void Dispose()
        {
            if (objects.Contains(this))
            {
                objects.Remove(this);
            }
        }

        public static void ShowObjects()
        {
            Console.WriteLine(string.Format("Count = {0}", objects.Count));
            for (int i = 0; i < objects.Count; i++)
            {
                Console.WriteLine(string.Format("Object #{0}, Name = {1}", i + 1, objects[i].name));
            }
            Console.WriteLine(); 
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            MyClass obj1 = new MyClass("object1");
            MyClass obj2 = new MyClass("object2");
            using (MyClass obj3 = new MyClass("object3"))
            {
                MyClass.ShowObjects();
            }
            MyClass.ShowObjects();
            MyClass obj4 = new MyClass("object4");
            MyClass.ShowObjects();
            Console.ReadKey();
        }
    }
 

dorche

New Member
شما میخواهید تعداد نمونه هایی که از این شی ساخته میشود رو داشته باشید ؟ کد زیر این کارو میکنه
کد:
using System;

namespace TestConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            MyClass m1 = new MyClass();
            MyClass m2 = new MyClass();

            Console.WriteLine("Count of instance : " + MyClass.Count);
            Console.ReadLine();
        }

        class MyClass
        {
            public static int Count;

            public MyClass()
            {
                Count++;
            }
        }
    }
}

یا

یک آرایه که محدودیت نداشته باشه ؟ ( که دوستمون The_king این رو توضیح دادند List<MyClass> objects = new List<MyClass>(); )

یا اینکه روی تعداد اشیا ساخته شده از یک شی مدیریت کنید ؟ به صورت زیر

کد:
using System;

namespace TestConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            MyClass m1 = MyClass.Create(2);
            MyClass m2 = MyClass.Create(2);
            MyClass m3 = MyClass.Create(2); // dont create new - return null
        }

        class MyClass
        {
            public static int Count;

            private MyClass()
            {
                Count++;
            }

            public static MyClass Create(int Num)
            {
                MyClass instance;

                if (Num >= Count)
                    instance = null;
                else
                    instance = new MyClass();

                return instance;
            }
        }
    }
}

جاییشو متوجه نشدین بگین که توضیح بدم
نکتش سازنده private می باشد
 

m_mx2009

Member
سلام دوباره به همه.
دوست عزیز من درمورد این لیست که فرمودید باز هم باید برنامه نویس یک شئ از نوع MyClass رو بسازه، ولی با این تفاوت که میتونه اسم شئ مورد نظرش رو همونجا به سازنده کلاس بفرسته.

هدف من این نیست!من میخوام که این شئ مثلا با کلیک کردن روی یک Button ساخته بشه و اگر کاربر دوباره روی این Button کلیک کرد شئ جدیدی با یک نام متفاوت ساخته بشه.که با ساختن لیست بالا این امکان برای من وجود نداره و باید شئ از نو کلاس رو باز هم خودم تعریف کنم.

اگه میتونید جواب من رو پیدا کنید چون خیلی واسم مهمه.

یک دنیا ممنون!
.:rose:
 
آخرین ویرایش:

the_king

مدیرکل انجمن
سلام دوباره به همه.
دوست عزیز من درمورد این لیست که فرمودید باز هم باید برنامه نویس یک شئ از نوع MyClass رو بسازه، ولی با این تفاوت که میتونه اسم شئ مورد نظرش رو همونجا به سازنده کلاس بفرسته.

هدف من این نیست!من میخوام که این شئ مثلا با کلیک کردن روی یک Button ساخته بشه و اگر کاربر دوباره روی این Button کلیک کرد شئ جدیدی با یک نام متفاوت ساخته بشه.که با ساختن لیست بالا این امکان برای من وجود نداره و باید شئ از نو کلاس رو باز هم خودم تعریف کنم.

اگه میتونید جواب من رو پیدا کنید چون خیلی واسم مهمه.

یک دنیا ممنون!
.:rose:

شیء رو همیشه و تحت هر شرایطی باید خودتون (برنامه نویس) ایجاد کنید، مهم زمان ایجاد کردنه وگرنه خارج از
اراده و بجز به فرمان شما که شیء ای ساخته نمیشه. شما می توانید کد شی ساختن رو داخل رخداد دکمه بنویسید.
این مثال پیوستی رو ببینید، اشکال اش کجا است که می گویید با لیست امکان اش وجود نداره؟

Save Object Names.zip
 

پیوست ها

  • Save Object Names.zip
    39.4 کیلوبایت · بازدیدها: 2

m_mx2009

Member
بالاخره متوجه مطلبتون شدم دوست عزیز.خیلی ممنونم.:):oops:

(این شئ گرا بودن #C هم باحاله هم اذیت میکنه!!):rose:
 

جدیدترین ارسال ها

بالا