PDA

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



صباح فتحی
چهارشنبه 13 مرداد 1389, 18:33 عصر
من یه کلاس تو برنامم دارم و یه سری توابع توشه...توی فرم نمیخام هر بار اسم کلاسو بنویسم.میخام یه نمونه ازش درست کنم اما وقتی درست میکنم ازش دیگه اون توابعو نمیاره.چرا؟؟؟؟

Salar Ashgi
چهارشنبه 13 مرداد 1389, 19:16 عصر
شما لازم نیست چند بار از کلاس آبجکت درست کنید ، وقتی یکبار آبجکتی از کلاس میسازید در Scope
مربوطه میتوانید از Member Function های کلاس استفاده کنید ./
اگه منظورتون اینه که اصلا از کلاس آبجکت درست نکنید و فقط با نام کلاس و عملگر دات ، به توابع کلاس
دسترسی پیدا کنید ، باید توابع کلاستون رو بصورت Static تعریف کنید ./
موفق باشید .

صباح فتحی
چهارشنبه 13 مرداد 1389, 22:05 عصر
دوست عزیز من از استاتیک استفاده کردم.نام کلاس و دات و تابع...
اما میخای یه نمونه از کلاس بسازم دیگه اون تابعهارو نمیبینم

AliRezaPro
چهارشنبه 13 مرداد 1389, 22:48 عصر
دوست عزیز من از استاتیک استفاده کردم.نام کلاس و دات و تابع...
اما میخای یه نمونه از کلاس بسازم دیگه اون تابعهارو نمیبینم
سطح دسترسی رو در صورت نقض نشدن درستی میتونی به پابلیک تغییر بدید

amireto
چهارشنبه 13 مرداد 1389, 22:55 عصر
سلام
توابع شما Public هستند؟

صباح فتحی
پنج شنبه 14 مرداد 1389, 01:52 صبح
public hast

صباح فتحی
پنج شنبه 14 مرداد 1389, 10:57 صبح
این کد کلاسم هست


namespace WindowsFormsApplication4
{
class Class1
{
static public int a = 18;

}

اینم یه کد دکمه:که اینو بلدم ومتغیر a روبهم میده



private void button1_Click(object sender, EventArgs e)
{
textBox1.Text = Class1.a();

}


اما اینطوری متغییر a رو بهم نمید




Class1 my = new Class1();
my.a()//

amireto
پنج شنبه 14 مرداد 1389, 11:27 صبح
اگر static نباشه مشکلت حل میشه
و یا یک خواصیت براش بنویسی


public int A
{
get { return a; }
}

اَرژنگ
پنج شنبه 14 مرداد 1389, 12:12 عصر
دوست عزیز من از استاتیک استفاده کردم.نام کلاس و دات و تابع...
اما میخای یه نمونه از کلاس بسازم دیگه اون تابعهارو نمیبینم


۱. بیجهت از استاتیک استفاده نکنید، استاتیک چکشی است که ناشیکارها ازش استفاده میکنند و به اشتباه به تازه‌کارها هم توصیه میکنند و به راه کج میبرند.
۲. همان static را وردارید کار میکنه. بیجهت به حرف اونهایی که میگند از استاتیک استفاده کنید گوش نکنید، خیلیها هیچ بلد نیستند و بقیه را هم گمراه نگه میدارنند.
ایده اینکه در کدتان نیاز به استفاده استاتیک بوده را از کجا گرفتید؟

صباح فتحی
پنج شنبه 14 مرداد 1389, 12:16 عصر
پابلیک هم برداشتم نشد...میشه زحمتشو بکشید؟؟

اَرژنگ
پنج شنبه 14 مرداد 1389, 12:24 عصر
پابلیک هم برداشتم نشد...میشه زحمتشو بکشید؟؟
کسی نگفت پابلیک را وردار! استاتیک ، من گوشم سنگینه چرا شما اشتباه میشنفی عزیز؟

Salar Ashgi
پنج شنبه 14 مرداد 1389, 12:33 عصر
این کد کلاسم هست


namespace WindowsFormsApplication4
{
classClass1
{
staticpublicint a = 18;

}
اینم یه کد دکمه:که اینو بلدم ومتغیر a روبهم میده



privatevoid button1_Click(object sender, EventArgs e)
{
textBox1.Text = Class1.a();

}
اما اینطوری متغییر a رو بهم نمید




Class1 my = newClass1();
my.a()//



اولا نحوه طراحی کلاس شما نادرست است ؛ یه اصل تو شی گرایی میگه بهتره اعضای
داده ای یه کلاس همیشه بصورت private و توابع عضو بصورت public بشن .
حالا اگه قرار یه جا اعضای داده ای بر حسب نیاز تغییر پیدا کنند ، اونو با پراپرتی ها انجام بدید.
اولا عمگلر () برای فیلد a صحیح نیست ، چراکه a فقط یه عضو داده ای است و نه یک متود که
بعد آن عملگر پارانتز بیاید . ثانیا نتیجه کد هم طبیعی است ، من در بالا گفتم اگه متغیری یا
تابعی بصورت Static تعریف بشه ، دیگه لازم نیست آبجکتی از کلاس بسازیم و میتوان با نام
کلاس و عملگر دات به آنها دسترسی داشت !

یه مثال :

فرض کنیم کلاس زیر رو داریم :


class Item
{
public int a { get; set; }
public override string ToString()
{
return a.ToString();
}

}

حالا :


private void button1_Click(object sender, EventArgs e)
{
Item item = new Item();
item.a = 5;
MessageBox.Show(item.ToString());

}


موفق و پیروز باشید ./

صباح فتحی
پنج شنبه 14 مرداد 1389, 12:37 عصر
کسی نگفت پابلیک را وردار! استاتیک ، من گوشم سنگینه چرا شما اشتباه میشنفی عزیز؟
باشما نبودم جناب:بامزه:

صباح فتحی
پنج شنبه 14 مرداد 1389, 12:42 عصر
آقا ارژنگ استاتیک رو برداشتم درست شد..توی کتاب جعفر نژاد دیدم ...راستی چرا کلاس من اشتباس..من از کلاس شما یکم سر در نیاوردم..توضیح میدی جناب؟

amireto
پنج شنبه 14 مرداد 1389, 16:11 عصر
ساده است
برای داشتن یک کلاس استاندارد
همانطور که آقا ارژنگ فرمودند اعضای داده ای باید private باشند با این کار دیگه از بیرون از کلاس مستقیما به داده ها دسترسی نداری
برای دسترسی به اعضای داده ای کلاس باید از توابع public یا خواصیت ها استفاده کنی



class class1
{
private int data;
public int Data
{
get { return date; }
set { data = value; }
}
}
وحال در برنامه به شکل زیر می توانی ازش استفاده کنی



private void button1_Click(object sender, EventArgs e)
{
class1 test = new class1();
test.Data = 5; //مقداردهی به داده کلاس
label1.Text = test.Data.ToString(); //بازیابی داده از کلاس

}

صباح فتحی
پنج شنبه 14 مرداد 1389, 19:10 عصر
مرسی از توضیح خوبتون...اما چرا اسم تابع و متغییریکیه؟
get ,set هم یکم توضیح بدید(ببخشید تازه کارم)

مهدی فرزاد
پنج شنبه 14 مرداد 1389, 20:12 عصر
یه نگاهی به این بنداز در آخر من یه توضیح مختصر در مورد Property دادم تمام پستها رو بخون
http://www.barnamenevis.org/forum/showthread.php?t=232835

و

http://barnamenevis.org/forum/showthread.php?t=183172

amireto
پنج شنبه 14 مرداد 1389, 23:36 عصر
امیدوارم لینکها مکفی باشند