PDA

View Full Version : سوال: تعریف تابعی که در کل برنامه قابل دسترس باشد



reza6266
پنج شنبه 30 اردیبهشت 1395, 00:49 صبح
چطوری یه تابع تعریف کنم که در سراسر برنامه قابل مقدار دهی یا مشاهده مقدارش باشم؟

mrprestige
پنج شنبه 30 اردیبهشت 1395, 02:06 صبح
سلام دوست من ، شما میتونی یک کلاس Public ایجاد کنی و تابع رو داخل اون تعیف کنی اینطوری میتونی اول با معرفی کلاس ت به تابع ت دسترسی داشته باشی . احتمالا منظورم رو متوجه نشده باشی بزار با مثال برات توضیح میدم
ببین دوست من شما اول رو پروژت کلیک راست میکنی و گزینه New Class... رو انتخاب میکنی بعد از اون پنجره ای نمایش داده میشه که نام کلاس رو ازت میخواد (بطور پیش فرض Class 1.cs ) و شما Ok رو بزن صفحه کد نویسی کلاس برات باز میشه در اینجا شما تابعتون رو مینویسید حالا Ctrl+S رو بزن و صفحه اصلی برنامت برو ، داخل کلاس Form اینطور بنویس ( با فرض اینکه نام کلاس شما Class 1 هست )

Class1 abc=new Class1();

حالا هر وقت خواستی از تابع ت استفاده کنی اینطوری مینویسی

abc.نام تابع(...);

منظور از abc نام متغییر هست که میتونی هر نامی رو بزاری و منظور از (...) همون تعداد پارامترهای ورودی تابع ت هست که ممکنه اصلا ورودی نداشته باشه .




پیروز و موفق باشی

reza6266
پنج شنبه 30 اردیبهشت 1395, 23:03 عصر
سلام ممنون از کمکتون
اما
این کد کلاس


public class Class1
{
int num=1;
}
اینجا تابع num رو نمیشناسه


{
Class1 a = new Class1();
Random r = new Random();
a.num = r.Next(0, 2);

if (num == 0)
{

gol.Left = 76;
gol.Top = 95;
}
else
{
gol.Left = 203;
gol.Top = 94;
}
timer1.Enabled = false;
}

mrprestige
پنج شنبه 30 اردیبهشت 1395, 23:27 عصر
سلام دوست من ، من عرض کردم شما اول باید تابعتون رو داخل کلاس تعریف کنی اینجا که شما داخل کلاستون چیزی ننوشتید بعدش اومدید توی محیط برنامه کلاستون رو فراخوانی کردید ؟؟؟

reza6266
پنج شنبه 30 اردیبهشت 1395, 23:30 عصر
جز
int num;
چی باید بنویسم کد نویسی کلاس رو درست بلد نیستم

mrprestige
جمعه 31 اردیبهشت 1395, 00:42 صبح
دوست من شما یه تابع دارید و اون رو میخواید تو کل برنامت استفاده کنی درسته تا اینجا ؟! خب وقتی که کلاس رو ایجاد کردی برو توی محیط کدنویسی کلاس


public Class Class1
{

بدنه ی تابع

{


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

Class1 M = new Class1();
M.نام تابع();




تمام . اگه بازم متوجه نشدی تابع رو برام بنویس من برات توی کلاس درمیارمش .

moradian
جمعه 31 اردیبهشت 1395, 11:45 صبح
سلام دوست من
بجای int num بنویس: public int num

moradian
جمعه 31 اردیبهشت 1395, 11:51 صبح
سلام دوستان
ما دو نوع کلاس داریم: داینامیک و استاتیک
در بالا از روش دینامیک استفاده شده. این در حالی است که اگر ما مقداردهی اولیه خصوصیات کلاس را نخواهیم، لزومی ندارد از آن نمونه بسازیم(new کنیم). فکر کنم مورد سوال شما با یه کلاس استاتیک راه بیفته. اگه اشتباه نکنم شما یه متغیر عمومی میخواین که یه جا مقداردهی بشه و تو جاهای مختلف استفاده بشه. به هرحال با ذکر یه مثال قضیه روشن تر میشه:
کلاس دینامیک:
کلیک راست روی نام پروژه / گزینه Add / گزینه Class / ورود نام کلاس. مثلا: MyDynClass.cs
و محتویات آن:


public class MyDynClass
{
// سازنده پیش فرض
public MyDynClass()
{

}

// سازنده همراه با پارامتر
public MyDynClass(int min, int max)
{
SetRandomVar(min, max);
}

// پراپرتی عمومی
public int MyRandomVar { get; set; }

// متد عمومی
public void SetRandomVar(int min, int max)
{
Random rnd = new Random();
MyRandomVar = rnd.Next(min, max);
}
}

و حالا روش استفاده از کلاس دینامیک بالا:


MyDynClass dc = new MyDynClass();
dc.SetRandomVar(1, 100);
MessageBox.Show(dc.MyRandomVar.ToString());

// و یا استفاده از سازنده دوم
MyDynClass dc2 = new MyDynClass(1, 100);
MessageBox.Show(dc.MyRandomVar.ToString());


کلاس استاتیک:
روش ایجاد همان است.
محتویات:


public static class MyStaticClass
{
// پراپرتی عمومی
public static int MyRandomVar { get; set; }

// متد عمومی
public static void SetRandomVar(int min, int max)
{
Random rnd = new Random();
MyRandomVar = rnd.Next(min, max);
}
}


و روش استفاده از کلاس استاتیک بالا:


MyStaticClass.SetRandomVar(1, 100);
MessageBox.Show(MyStaticClass.MyRandomVar.ToString ());

// و یا
MyStaticClass.MyRandomVar = 28;
MessageBox.Show(MyStaticClass.MyRandomVar.ToString ());


چنانکه می بینید در کلاس های استاتیک کلمه کلیدی static در تعریف آن و در همه متدها و پراپرتی های آن وجود دارد
و متد سازنده ای تعریف نشده است. بنابراین لزومی به ایجاد نمونه و new کردن آن هم نیست.
نکته مهم این که توصیف کننده public رو تو تعریف پراپرتی ها و متدهایی که می خواهید خارج از کلاس در دسترس باشند رو فراموش نکنید.
حالا با توجه به نیاز خود در پروژه می توانید یکی از این دو روش را به کار بگیرید. البته موارد دیگری هم تعاریف کلاس ها هست ولی به جهت پرهیز از شلوغی سعی کردم مختصر و مفید عرض کنم.
امیدوارم لپ مطلب ادا شده باشد. موفق باشید

reza6266
جمعه 31 اردیبهشت 1395, 18:12 عصر
سلام دوست من
بجای int num بنویس: public int num

سلام ممنون
اما
موقعی که از کلاسمون object میسازیم و به متغیر مقدار میدم.
جایی دیگه که مقدارش رو میخوام 0 میده.
ممنون میشم راهنمایی کنید

moradian
سه شنبه 04 خرداد 1395, 14:49 عصر
سلام ممنون
اما
موقعی که از کلاسمون object میسازیم و به متغیر مقدار میدم.
جایی دیگه که مقدارش رو میخوام 0 میده.
ممنون میشم راهنمایی کنید
دوست من، مقاله زیرش رو بخون همه چی دستت میاد
تو این مورد هم از نوع کلاس استاتیک استفاده کن تا نخوای آبجکت بسازی.
اگه میخوای واقعا سی شارپ کار بشی، پیشنهاد می کنم ابتدا با کلاس ها خوب آشنا بشی، بعدش ادامه بدی :متفکر:
موفق باشی