PDA

View Full Version : سوال: شمارنده در سی شارپ با حافظه ماندگار



adam_11
شنبه 04 شهریور 1402, 07:05 صبح
با سلام ،
در سی شارپ چطور میتوان یک کانتر معرفی کرد که بعد از اجرای هر بار کلاس مربوطه یک واحدد اضافه گردد و بعد از خروج از برنامه به مقدار صفر بر نگردد ( در vb راحت بود ) و مقدار را تا فراخوانی بعدی نگه دارد ، اگر بخواهم از پایگاه داده استفاده کنم فراخوانی و ویرایش سرعت را میگیرد . آرایه ها هم که به مقدار اولیه بر میگردند ، البته من تازه با سی شارپ کار میکنم .

ROSTAM2
شنبه 04 شهریور 1402, 09:12 صبح
با سلام ،
در سی شارپ چطور میتوان یک کانتر معرفی کرد که بعد از اجرای هر بار کلاس مربوطه یک واحدد اضافه گردد و بعد از خروج از برنامه به مقدار صفر بر نگردد ( در vb راحت بود ) و مقدار را تا فراخوانی بعدی نگه دارد ، اگر بخواهم از پایگاه داده استفاده کنم فراخوانی و ویرایش سرعت را میگیرد . آرایه ها هم که به مقدار اولیه بر میگردند ، البته من تازه با سی شارپ کار میکنم .
سلام
من که منظورت و متوجه نشدم اگه بحث ذخیره سازی هست که راه های مختلفی هست
1- رجیستری
2- فایل متنی ساده
3- سند xml
4- تنظیمات پروژه (My.Settings)

پرستو پارسایی
یک شنبه 05 شهریور 1402, 08:30 صبح
به نظرم برای این کار استفاده از یک متغیر static در کلاس مورد نظر روش مناسبی هست . یک متغیر static به صورت مشترک بین تمام نمونه های آبجکت کلاس قابل دسترس است ولی دسترسی به آن از طریق نمونه های کلاس به صورت instance نیست. بعنوان مثال :



using System;
public Class Counter
Private static int count = 0; // متغیر static
public Counter()
count++;
public static int GetCount()
return count;
public class Program
public static void Main(string)[] args)
Counter c1 = new Counter ();
Counter c2 = new Counter ();
Counter c3 = new Counter ();
Console .WriteLine(Counter.GetCount()); // نمایش مقدار کانتر

در این مثال هر بار که یک نمونه از کلاس Counter ایجاد میشود ، مقدار متغیر Count افزایش می یابد . سپس با استفاده از متد GetCount میتوان مقدار کل کانتر را دریافت کرد . در خروجی این مثال مقدار 3 نمایش داده میشود که نشان میدهد هر با که یک نمونه از کلاس Counter ایجاد میشود ، مقدار کانتر افزایش می یابد.

adam_11
یک شنبه 05 شهریور 1402, 11:43 صبح
به نظرم برای این کار استفاده از یک متغیر static در کلاس مورد نظر روش مناسبی هست . یک متغیر static به صورت مشترک بین تمام نمونه های آبجکت کلاس قابل دسترس است ولی دسترسی به آن از طریق نمونه های کلاس به صورت instance نیست. بعنوان مثال :



using System;
public Class Counter
Private static int count = 0; // متغیر static
public Counter()
count++;
public static int GetCount()
return count;
public class Program
public static void Main(string)[] args)
Counter c1 = new Counter ();
Counter c2 = new Counter ();
Counter c3 = new Counter ();
Console .WriteLine(Counter.GetCount()); // نمایش مقدار کانتر

در این مثال هر بار که یک نمونه از کلاس Counter ایجاد میشود ، مقدار متغیر Count افزایش می یابد . سپس با استفاده از متد GetCount میتوان مقدار کل کانتر را دریافت کرد . در خروجی این مثال مقدار 3 نمایش داده میشود که نشان میدهد هر با که یک نمونه از کلاس Counter ایجاد میشود ، مقدار کانتر افزایش می یابد.


با تشکر از لطف شما ولی وقتی برنامه بسته میشود کانتر به پیش فرض بر میگردد .

پرستو پارسایی
یک شنبه 05 شهریور 1402, 20:27 عصر
بله، در مثال قبلی، هر بار که برنامه اجرا می‌شود، مقدار `count` افزایش می‌یابد ولی اگر برنامه بسته شود و دوباره اجرا شود، مقدار `count` به حالت اولیه بازمی‌گردد که صفر است.

برای ذخیره و بازیابی مقدار `count` بین اجراهای مختلف برنامه، می‌توان از روش‌های دیگری مانند ذخیره مقدار در فایل یا پایگاه داده استفاده کرد. این هم یک مثال استفاده از فایل برای ذخیره و بازیابی مقدار `count` :

using System;
using System.IO;


public class Counter
{
private static int count = 0;


public Counter()
{
count++;
}


public static int GetCount()
{
return count;
}


public static void SaveCountToFile(string filePath)
{
File.WriteAllText(filePath, count.ToString());
}


public static void LoadCountFromFile(string filePath)
{
if (File.Exists(filePath))
{
string countString = File.ReadAllText(filePath);
int.TryParse(countString, out count);
}
}
}


public class Program
{
public static void Main(string[] args)
{
Counter.LoadCountFromFile("count.txt");


Counter c1 = new Counter();
Counter c2 = new Counter();
Counter c3 = new Counter();


Console.WriteLine(Counter.GetCount());


Counter.SaveCountToFile("count.txt");
}
}



در این مثال، متدهای `SaveCountToFile` و `LoadCountFromFile` اضافه شده‌. متد `SaveCountToFile` مقدار `count` را در یک فایل متنی ذخیره می‌کند و متد `LoadCountFromFile` مقدار ذخیره شده را از فایل بارگزاری می‌کند. در ابتدای اجرای برنامه، مقدار `count` از فایل `count.txt` بارگزاری می‌شود. سپس نمونه‌های `Counter` ساخته می‌شوند و مقدار `count` نمایش داده می‌شود. در نهایت، مقدار `count` در فایل ذخیره می‌شود. با اجرای مجدد برنامه، مقدار `count` از فایل بارگزاری می‌شود و ادامه می‌یابد.

ShayanFiroozi
پنج شنبه 09 شهریور 1402, 23:58 عصر
سلام ،

با رجیستری کار کنین.

shahryari
سه شنبه 14 شهریور 1402, 10:51 صبح
اگه میخای کلا پاک نشه (حتی با اف دیسک) یادمه یه زمانی در کامپیوتر های قدیمی ، با اسمبلی در یکی از ثبات های بایوس یا چیپ eeprom مین بورد، یک بایت ( 8 بیت) را میتونستیم بنویسم و بخونیم

mazoolagh
سه شنبه 14 شهریور 1402, 12:00 عصر
اگه میخای کلا پاک نشه (حتی با اف دیسک) یادمه یه زمانی در کامپیوتر های قدیمی ، با اسمبلی در یکی از ثبات های بایوس یا چیپ eeprom مین بورد، یک بایت ( 8 بیت) را میتونستیم بنویسم و بخونیم

آمدم بنویسم که:
این کارها رو دیگه نمیشه الان با برنامه های معمولی ویندوزی و بایوس های مدرن انجام داد (دست کم مستنداتی براش بصورت پابلیک نیست و منطقی هم هست)
که دیدم خودتون ادیت کردین پست رو.

همون رجیستری منطقی ترین و بهترین گزینه است که همون اول در پست 2 اشاره شد (در پست 6 هم تاکید شد)،
و اگر قرار است بعنوان قفل برنامه استفاده بشه که بهترین راه یک دانگل هست.