
تعداد نمونه هاي ساخته شده از يک شي در سي شارپ
webAI
1404/07/28
برخي مواقع در حين برنامه نويسي نياز هست تا بخواهيم تعداد نمونه هاي ساخته شده از يک کلاس (تعداد اشياء ساخته شده) را داشته باشيم . مثلا در يک بازي ماشين راني بخواهيم تعداد نمونه هاي ساخته شده از يک نوع خودرو را بدونيم . خوب براي اين کار ميشه از روش هاي مختلفي استفاده کرد مثلا بياييم تک تک خود رو ها رو شمارش کنيم (که البته روش مناسبي نيست) . يا اينکه تعداد ساخته شده از هر کلاس را در يک آرايه يا يک فايل ذخيره کنيم و... روش هاي زيادي براي اين امر وجود داره ولي هرکدام داراي اشکالات و معايبي هست ولي روشي که در ادامه به آن ميپردازيم ضمن اينکه نياز به مديريت کمتري داره . ميشه خيلي راحت به تعداد نمونه ها دسترسي پيدا کرد .
برخي مواقع در حين برنامه نويسي نياز هست تا بخواهيم تعداد نمونه هاي ساخته شده از يک کلاس (تعداد اشياء ساخته شده) را داشته باشيم . مثلا در يک بازي ماشين راني بخواهيم تعداد نمونه هاي ساخته شده از يک نوع خودرو را بدونيم . خوب براي اين کار ميشه از روش هاي مختلفي استفاده کرد مثلا بياييم تک تک خود رو ها رو شمارش کنيم (که البته روش مناسبي نيست) . يا اينکه تعداد ساخته شده از هر کلاس را در يک آرايه يا يک فايل ذخيره کنيم و... روش هاي زيادي براي اين امر وجود داره ولي هرکدام داراي اشکالات و معايبي هست ولي روشي که در ادامه به آن ميپردازيم ضمن اينکه نياز به مديريت کمتري داره . ميشه خيلي راحت به تعداد نمونه ها دسترسي پيدا کرد .
براي اين کار ابتدا کلاس مد نظر را پياده سازي ميکنم :
public class vehicles{
}
سپس يک متغيير شمارنده عددي (int) از نوع ايستا(static) تعريف ميکنيم اين متغيير محلي براي ذخيره سازي تعداد نمونه هاي ايجاد شده است
private static int _counter;
حال يک سازنده ايستا ايجاد ميکنيم اين سازنده فقط يک بار اجرا ميشه و به وسيله اون ما يک مقدار اوليه به متغيير شمارنده انتساب ميدهيم .
static vehicles(){
_counter = 0;
}
حالا هر زمان که نمونه اوليه از اين کلاس ايجاد بشه بايد يک واحد به شمارنده اضافه بشه و هر وقت يک نمونه از بين بره بايد يک واحد از آن کم بشه . براي اين کار ميشه از سازنده و مخرب مربوط به هر نمونه استفاده کرد
public vehicles(){_counter ++;)
~vehicles(){_counter --;)
البته در اينجا بايد به يک نکته توجه کرد و اون اينه که زمان تخريب کلاس را کامپايلر سي شارپ تعيين ميکند و ما نميتوانيم به زمان دقيق آن را بدست بياوريم پس در اينجا ميتوانيم يک متد ثانويه ايجاد کنيم و در زمان مورد نياز آنرا فرا بخوانيم تا يک واحد از شمارنده کم کند . خوب حالا براي دسترسي به مقدار شمارنده کافي است که يک خصوصيت ايستا به صورت زير ايجاد کنيم .
public static int Count
{
get{return _counter;}
}
حالا هر زمان که به تعداد نمونه هاي ساخته شده نياز داشته باشيم به صورت زير عمل مي کنيم .
vehicles.Counter;