PDA

View Full Version : سوال: علت اینکه پارامترهای constructor رو هم اسم با متغیرهای کلاس می نویسن چیه؟



sahel65
یک شنبه 22 اردیبهشت 1392, 07:42 صبح
سلام؛
دوستان گاهی اوقات من دیدم تو ایجاد constructor از این کد استفاده می کنن:

class MyClass
{
string Name;
string Surname;
int Age;

// Constructor
public MyClass(string name, string surname, int age)
{
Name = name;
Surname = surname;
Age = age;
}


و گاهی هم اینطوری:



class MyClass
{
string Name;
string Surname;
int Age;

// Constructor
public MyClass(string Name, string Surname, int Age)
{
this.Name=Name;
this.Surname=Surname;
this.Age=Age;
}


البته مورد دوم رو زیاد مطمئن نیستم که همینجوری دیدم تو کدها یا نه!ولی فکر کنم درست نوشتم.
میخواستم ببینم علت اینکه همنام می نویسن و یا اینکه مثل اولی بعدش میان و متغیرها رو برابر با پارامترها قرار میدن چیه؟ چه مزیتی داره؟ خب اگه اسمهای متفاوت برای پارامترها انتخاب کنیم بهتر نیست؟ اینجوری گیج هم نمیشیم.
اگه میشه یه توضیح کوچیکی در این مورد بهم بدید ؛ مرسی.

wolf_majid
یک شنبه 22 اردیبهشت 1392, 08:38 صبح
زمانی که از یک کلاس نمونه سازی می کنی برای اعمالی که میخوای انجام بدی نیاز داری تا یک سری اطلاعات را توی نمونه کلاس ذخیره کنی
خوب در مورد دو کد بالا هم کاربر خواسته نام و دیگر اطلاعات رو در نمونه کلاس داشته باشه
اما از اونجا که در کد دوم اسم پارامترهای ورودی دقیقا" با متغیرهای کلاس یکیه باید برای اینکه به متغیرهای کلاس دسترسی داشته باشیم از this استفاده کنیم که به کلاس جاری اشاره میکنه
دلیل همنام نویسیش هم اینه که میخواد برای خودش و کاربری که با کلاس کار میکنه قابل فهم باشه

البته بهتر اینه که متغیرهای private (همون متغیرهای داخل کلاس مثل name) با حروف کوچک و یا _ شروع بشن مثل _name

sahel65
یک شنبه 22 اردیبهشت 1392, 13:37 عصر
البته بهتر اینه که متغیرهای private (همون متغیرهای داخل کلاس مثل name) با حروف کوچک و یا _ شروع بشن مثل _name
یعنی اینجوری می نوشتیم بهتر بود:

class MyClass
{
string Name;
string Surname;
int Age;

// Constructor
public MyClass(string name, string surname, int age)
{
Name = name;
Surname = surname;
Age = age;
}



الان در کد فوق موضوعی که شما میگید رعایت شده دیگه؛ یعنی متغیرهای داخل کلاس با حروف بزرگ شروع میشن. قبوله؟

fool66
یک شنبه 22 اردیبهشت 1392, 13:51 عصر
http://noorportal.net/javan/itlearn/show-443.aspx

http://www.webtarget.ir/blog/%D8%B2%D9%86%DA%AF-%D8%B3%DB%8C%E2%80%8C%D8%B4%D8%A7%D8%B1%D9%BE-%D9%82%D8%B3%D9%85%D8%AA-%D8%A8%DB%8C%D8%B3%D8%AA-%D9%88-%DB%8C%DA%A9%D9%85/

manij_mhm
یک شنبه 22 اردیبهشت 1392, 14:19 عصر
فرقی نمی کنه نام پارامتر ها چی باشن،شما هراسمی می تونید بذارید، فقط برای قابل فهم بودن و سادگی کار بازخوانی کد و یا وقتی از تابع استفاده، اینجوری نوشته شده.



موفق باشید.

fool66
یک شنبه 22 اردیبهشت 1392, 14:23 عصر
سلام؛
دوستان گاهی اوقات من دیدم تو ایجاد constructor از این کد استفاده می کنن:

class MyClass
{
string Name;
string Surname;
int Age;

// Constructor
public MyClass(string name, string surname, int age)
{
Name = name;
Surname = surname;
Age = age;
}


و گاهی هم اینطوری:



class MyClass
{
string Name;
string Surname;
int Age;

// Constructor
public MyClass(string Name, string Surname, int Age)
{
this.Name=Name;
this.Surname=Surname;
this.Age=Age;
}


البته مورد دوم رو زیاد مطمئن نیستم که همینجوری دیدم تو کدها یا نه!ولی فکر کنم درست نوشتم.
میخواستم ببینم علت اینکه همنام می نویسن و یا اینکه مثل اولی بعدش میان و متغیرها رو برابر با پارامترها قرار میدن چیه؟ چه مزیتی داره؟ خب اگه اسمهای متفاوت برای پارامترها انتخاب کنیم بهتر نیست؟ اینجوری گیج هم نمیشیم.
اگه میشه یه توضیح کوچیکی در این مورد بهم بدید ؛ مرسی.





فرقی با هم ندارن فقط چون نام پارامتر با نام متغییر یکی هست کلمه this رو نوشته که اشاره به متغییر هست اگه این کلمه رو ننویسه هر دو Name اشاره به پارامتر می کنن

wolf_majid
یک شنبه 22 اردیبهشت 1392, 16:40 عصر
بهتر اینه :

class MyClass
{
string _name;
string _surName;
int _age;

// Constructor
public MyClass(string name, string surname, int age)
{
_name=name;
_surname = surname;
_age = age;
}

زمانیکه متغیر توی کلاس تعریف میشه معمول اینه که با حروف کوچک شروع میشه و اگر چند کلمه بود مثل surName کلمه دوم با حروف بزرگ شروع میشه
متدها و پروپرتی ها با حروف بزرگ شروع میشن
در مورد پارامترهای متدها مطمئن نیستم اما احتمالا" اونها هم با حروف کوچک شروع میشن و شاید این دلیلی باشه برای اینکه برای متغیرای خصوصی کلاس از _ استفاده می کنند

البته در مورد بالا همچنین بهتر اینه که حداقل برای متغیر _age یک پروپرتی تعریف بشه که مقادیر ورودی کنترل بشن مثل


Public int Age{
set
{
if(value<0 && value >150)
value=0;
_age=value;
}
get{return _value;}
}