PDA

View Full Version : مبتدی: سوالاتی در مورد Field , Property, توابع سازنده ، Public ، Private



delphi5
شنبه 24 دی 1390, 16:07 عصر
با سلام حضور سروران گرامی
من مبتدی هستم . دارم رو مفاهیم سی شارپ و به کلی بروی شیء گرایی دارم کار میکنم . یکسری مطالعه و همچنین جستجو داشتم که بجائی ختم نشد . میشه راهنمائی بفرمائید .
من برای یادگیری بهتر یک پروژه تعریف کردم
از معماری سه لایه استفاده کردم
در لایه اول کلاسهایم رو تعریف کردم
در لایه دوم دیتابیس
در لایه سوم فرم ها را تعریف کردم
حالا در لایه کلاس ، کلاسی رو تعریف کردم برای اینکه مقدار ID و نام کاربری ، نام ، نام خانوادگی رو در خود ذخیره کنه
این کلاس در لایه Classlaye قرار دارد و بصورت زیر تعریف شده است


public class StoreUserLogonInfo
{
private int StoredId;
public int id
{
set{ this.StoredId=value;}
get { return StoredId;}
}
private string StoredUsername=string.Empty;
public string Username
{
set{ this.StoredUsername=value;}
get { return StoredUsername;}
}
private DateTime StoredLogonTime;
public DateTime LogonTime
{
set { this.StoredLogonTime = DateTime.Now; }
get { return StoredLogonTime;}
}
}


پس از تعریف این کلاس در فرم اول پس از اینکه کلمه عبور و نام کاربری رو چک کردم ، خواستم تا مقادیر بالا را در کلاسم ذخیره کنم تا در فرم های دیگر بتونم ازشون استفاده کنم . بصورت زیر


if (idd != 0)
{
StoreUserLogonInfo LogonInfo = new StoreUserLogonInfo();
LogonInfo.id = idd;
LogonInfo.Username = UserText.Text;
LogonInfo.LogonTime = DateTime.Now;
if (Datareader != null)
Datareader.Close();
this.Hide();
MainPage mainpage = new MainPage();
mainpage.Show();
}
else
{
MessageBox.Show("خطا در ورود نام کاربری با کلمه عبور . لطفا مجددآ سعی نمائید");
}


حالا در فرم های بعد مثلا در فرم 2 میخوام که اطلاعات کاربری وارد شده را بروی یک Lable نمایش بدم که موفق نشدم .
لازم به ذکر است که من کلیه لایه ها را در سایر لایه ها Add refrence کردم
در تمام فرم ها نام کلاس رو using کردم
در ضمن میخواستم از توابع سازنده برای چر کردن فیلدها استفاده کنم که نشد .
حالا اگه ممکنه منو راهنمائی بفرمائید

با تشکر

delphi5
یک شنبه 25 دی 1390, 08:45 صبح
با سلام مجدد
تعداد بازدید این تاپیک 18 تاست . یکی از مدیران محترم هم بازدید فرمودند و این پست رو مورد لطف قرار دادند ، اما دریغ از یک جواب
آیا سوال مطرح شده ارزش علمی ندارد ؟
امیدوار بودم بتونم جواب بگیرم .
باز هم منتظرم

mehran_sh_t
یک شنبه 25 دی 1390, 11:31 صبح
سلام
نمی دونم درست متوجه سوالتون شدم یا نه! ولی فک کنم شما می خواید اطلاعات ورود رو در صفحات دیگه هم داشته باشید (با ریختن در یک کلاس)

اگر سوال این بود، شما شیئ مربوطه (LoginInfo) کلاس مورد نظر رو درون تابع تعریف می کنید، که با تموم شدن تابع، عمر شیئ هم تموم میشه و از بین میره.
باید طوری تعریف کنید که از همه جا قابل دسترسی باشه. و این به مدل طراحی تون بستگی داره

delphi5
دوشنبه 26 دی 1390, 13:17 عصر
دقیقا منظورم همین بود .
خوب پیشنهاد چیه ؟
من تا بحال فکر میکردم که زمانی که این کلاس رو ایجاد میکنم و درون اون مقداری رو دخیره میکنم ، اون اطلاعات داخل حافظه باقی میمونه .
چه کاری باید انجام بدم
میشه لطفا راهنمائی بفرمائید .

mehran_sh_t
دوشنبه 26 دی 1390, 13:51 عصر
در مورد scope برای متغیر ها/اشیاء بخونید، با این مفاهیم که یک متغیر تا چه زمانی در برنامه هستش و از کجاها قابل دسترسی هست آشنا میشید. حتما این رو بخونید، چون به نوعی بخشی از شیئ گرایی هم به حساب میاد که اساس برنامه نویسی هستش!

در این مورد هم، همونطور که گفتم، بستگی به نوع طراحی شما داره که این رو کجا به کار ببرید.

در یک مدل شما کلاس رو به صورت static تعریف می کنید.
در مدل دیگه، یک شیئ از اون رو در کلاسی تعریف می کنید که از همه جا قابل دسترسی باشه.

و ...

موفق باشید

m2_farzan
دوشنبه 26 دی 1390, 14:37 عصر
نمی دونم که می دونید یا نمی دونید :لبخندساده: که اگه یک متغیر رو به صورت public و static تعریف کنید، می تونید از اون در جایی خارج از کلاس هم استفاده کنید (همون طور که mehran_sh_t هم اشاره کرد). من اینجا یک int به نام num1 درست کردم که public و static هست. این متغیر داخل یک کلاس فرم به نام Form1 تعریف شده:

class Form1:Form{
public static int num1=0;
}

حالا هر جای برنامه حتی در کلاسهای دیگه که بخوام به متغیر num1 دسترسی پیدا کنه از عبارت زیر استفاده می کنه:

Form1.num1

شما هم می تونی همین کار رو بکنی یعنی محتوای اون TextBox رو در یک string که static و public هست تعریف کنی و در فرم دوم از اون به صورتی که گفتم استفاده کنی.

موفق باشی

senaps
دوشنبه 26 دی 1390, 16:32 عصر
سلام....
استاتیک دقیقا کارش چیه؟! منظورم اینه که یه جورایی غیر قابل تغییره؟!! اخه فک کنم یه بار از سر ندونم کاری!! پشت بند یه تابع استاتیک گذاشتم،بیرون از کلاس هیچ جوری نشد ازش استفاده کنم!!(بله مشخصا یادم هست که تابع از نوع عمومی بودش!)....

REZAE2011
دوشنبه 26 دی 1390, 21:35 عصر
سلام

استاتیک دقیقا کارش چیه؟!

اگر در کلاسی که تعریف کردید تابع یا متغیر ی static داشته باشید. می تونید از این عناصر static بدون ایجاد شی از کلاس -و فقط با نام آن کلاس-استفاده کنید به عبارتی شما هر تعداد شی از کلاس تان تعریف کنید این عناصر static برای تمام اشیا تعریف شده یک مکان از حافظه را اشغال می کنند مثلا فرض کنید شما یک کلاس برای کارمندان یک شرکت تعریف کردید به نام Employeeبرای این کارمندان رئیس شرکت یک شخص واحدی است پس متغیری-با نام Manager- که نام رئیس شرکت را برای کارمندان نگه می دارد باید از نوع static باشد تا برای تمام شی های کلاس Employeeفقط یک مکان در حافظه برای متغیر Managerباشد و وقتی رئیس کارمندان عوض شد کافیست فقط این متغییر را تغییر داد تا برای تمام اشیا کارمندان در حافظه نام رئیس شان عوض شود و برای استفاده از این متغیر باید آن را همراه با نام کلاس آورد :
Employee.Manager = "name";

m2_farzan
سه شنبه 27 دی 1390, 11:05 صبح
دقیقا درست گفت. به عنوان مثال تابع math.sin که برای محاسبه سینوس به کار میره یک تابع static هست. چون شما برای استفاده از آن لازم نیست یک نمونه از math رو ایجاد کنید.