PDA

View Full Version : سوال: برای مرجع this ومرجع کلاس و مرجعهای اشیای کلاس



سارا_1372
دوشنبه 14 بهمن 1392, 02:02 صبح
من در فصل کلاس و اشیا با 3 عبارت
" مرجع this " : هر شی میتواند به خودش با مرجع this مراجعه کند
" مرجع کلاس"
"مرجع اشیای کلاس "[البته این عبارت اولین بار در قسمت ترکب: مرجع کلاس به عنوان فیلید کلاس دیگه اومده] که فیلد کلاس دیگه رو متوجه میشم اما مرجع کلاس .. تعریف شده نیست داخل کتاب..
بر خوردم مثال ها رو میتونم درک کنم اما اصلا با این 3 مفهموم و جملات بی ربطی که داخل کتاب نوشته و اصلا توضیح نداده اینها چی هستن نمیتونم متوجه ی این عبارت ها بشم..

ممنون میشم که این ها رو برام باز کنید که چی هستن

rahnema1
دوشنبه 14 بهمن 1392, 12:42 عصر
اشکال از ترجمه تحت اللفظی مترجم کتاب هست
الف.«مرجع this» باید باشد :« this به عنوان مرجع »
ب.مرجع کلاس بسته به جایی که استفاده شده به دو صورت میتونه در نظر گرفته بشه
1. کلاس از کلمات کلیدی است که با آن می توان «نوع» های مرجعی reference type را اعلان کرد . در مقایسه با نوع های مقداری value types
2. فهرستی از اعضای کلاس ( یعنی متغیرها و متد های موجود در آن کلاس)
ج.مرجع اشیای کلاس باید باشد: مرجع به شیء ایجاد شده از نوع یک کلاس
در مورد قسمت ج فرض کنید شما یک کلاس داشته باشید به نام Customer


public class Customer
{
int id;
string name
public Customer(int id,string name)
{
this.id=id;
this.name=name;
}
}


اینجا ما با استفاده از کلمه کلیدی class یک نوع مرجعی تعریف کردیم به نام Customer اما مثلا Int یک نوع مقداری هست که قبلا توسط ایجاد کنندگان سی شارپ تعریف شده است. یا مثلا string یک نوع مرجعی است که قبلا تعریف شده
حالا اگه این جوری بنویسید :


Customer object2;


object2 یک مرجع است به شیئی که قرار است از نوع Customer ساخته شود
حالا اگه بزنید


Customer object3 = new Customer();

object2 یک مرجع است به شیئی که از نوع Customer ساخته شده
حالا شما کلمه کلیدی this را در نظر بگیرید این کلمه برای این استفاده شده که بین دو کلمه مشابه id و name اشتباه نشه یکی به عنوان آرگیومنت ورودی متد و دیگری به عنوان یکی از اعضا یا فیلدهای کلاس
this هم نوعی مرجع است که به یک شیء اشاره می کند توجه کنید this به Customer اشاره نمی کند بلکه به شیئی اشاره می کند که ما از نوع Customer خواهیم ساخت
من به مترجمین پیشنهاد می کنم به جای واژه نامانوس «مرجع» از واژه «حواله» استفاده کنند!. حواله به خودی خود کاری انجام نمیده بلکه اون را می دهند تا یک کالا یا جنس را بگیرند. اما از واژه هایی مثل آدرس یا اشاره گر هم می شود استفاده کرد اما این دو واژه در سی شارپ معنای دیگری می دهند
به شما هم پیشنهاد می کنم هر جا که در کتاب نوشته مرجع، اون را خط بزنید و به جایش بنویسید حواله

سارا_1372
دوشنبه 14 بهمن 1392, 22:40 عصر
پس this به فیلد همنام با آرگومان یا متغیر متد که مخفی شده در شی ایجاد شده(نه کلاس) اشاره و یا حواله میکنند و یا ارجا میدهد[با توضیحات شما من واژه ی ارجا رو برای this انتخاب کردم درسته؟]



1. کلاس از کلمات کلیدی است که با آن می توان «نوع» های مرجعی reference type را اعلان کرد . در مقایسه با نوع های مقداری value types
کلمه کلیدی کلاس باعث ایجاد یک نوع ارجاعی مشه. یعنی تمام اشیای که اعلان میکنیم از نوع ارجاعی هستند.[درست میگم؟] در این صورت میشه به اشیا ایجاد شده گفت "مرجع کلاس" مثل:



public class Customer
{
string name
private class1 object1;
public Customer(class1 object2,string name)
{
object1=object2;
}
}

که الان object2 و object1 ارجا به کلاس هستند [ شی ]


2. فهرستی از اعضای کلاس ( یعنی متغیرها و متد های موجود در آن کلاس)

ارجا های کلاس معنی دیگری که دارد هم تمام اعضای کلاس با سطح دست رسی public

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

یک دنیا ممنون میشم که اون چیزی که من متوجه شدم[بالا نوشتم] رو بررسی کنید ببیند درست متوجه شدم یا نه

rahnema1
سه شنبه 15 بهمن 1392, 00:52 صبح
this به خود شیء حواله میده نه اعضای آن. this یعنی « خودم» به عنوان یک شیئ ایجاد شده از نوع یک کلاس. یعنی خودم به خودم ارجاع می دهم
بله تمام اشیایی که از یک کلاس ایجاد می شوند از نوع ارجاعی یا حواله ای هستند یعنی اون متغیر، مقدار موجود در شیئ را ذخیره نمی کنه بلکه ارجاعی به اون را ذخیره می کنه
ببینید اصلا من با واژه «مرجع کلاس» مشکل دارم
اگه ترجمه Class Reference باشه یعنی فهرست تمام اعضای public و private و ... که ما مثلا در هلپ کلاسهای سی شارپ مطالعه می کنیم شما کتابی یا یک فایل پی دی اف را در نظر بگیرید که در آن فهرست اعضای یک کلاس و خصوصیت آنها را نوشته باشه به اون کتاب می گوییم مرجع کلاس ( اینجا کلمه مرجع به درستی استفاده شده)
اگه ترجمه class keyword is used to declare reference types باشه همون طور که گفتم کلمه کلاس برای اعلان نوع حواله ای استفاده میشه
اصلا عبارت « ارجاع به کلاس» اشتباهه . ارجاع به شیء درسته
وقتی ما می گوییم «کلاس Customer» یعنی منظورمون اینه که « نوع حواله ای Customer که با استفاده از کلمه کلیدی class اعلان شده»

سارا_1372
سه شنبه 15 بهمن 1392, 23:08 عصر
اصلا عبارت « ارجاع به کلاس» اشتباهه . ارجاع به شیء درسته

دقیقا با جای گزینی ارجاع به شی همه چیز از نظر مفهومی درست شد!
متوجه شدم ممنونم

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

بازم از شما ممنونم

mhsmity
چهارشنبه 16 بهمن 1392, 00:34 صبح
سلام
با توجه به این جمله

اصلا عبارت « ارجاع به کلاس» اشتباهه . ارجاع به شیء درسته

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

من میگم ارجاع به شی ارجاع به کلاس میشه.

rahnema1
چهارشنبه 16 بهمن 1392, 16:43 عصر
سلام
با توجه به این جمله


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

من میگم ارجاع به شی ارجاع به کلاس میشه.

ببینید اینجا نمی خواهیم بازی با الفاظ کنیم ما به معنای تحت اللفظی توجهی نداریم
رفرنس یک مقدار است که بزنامه جهت دسترسی غیر مستقیم به یک داده از آن استفاده می کند
یعنی به آن داده حواله می دهد
وقتی که ما یک شیء از نوع یک کلاس ایجاد می کنیم اسم آن در واقع حواله می دهد به همون شیء که در حافظه درست شده
شما حواله یا رفرنس را به عنوان آدرس آن شیء در نظر بگیرید
حالا اگر ما مقدار داده ای که توسط آن رفرنس به آن اشاره شده است را تغییر بدهیم آن شیء تغییر می کند
اما با این کار آیا کلاس به عنوان یک نوع تغییر می کند؟ رفرنس به شیء ارجاع می دهد به کلاس ارجاع نمی دهد
شما می توانید آدرس یک «نوع» را به دست بیاورید؟ یا شما می توانید آدرس یک شیء که از روی آن نوع ایجاد شده را به دست بیاورید؟
منظور ما از رفرنس اینه و تعریف رسمیش هم اینه حالا اگه شما دوست دارید واسه خودتون اینجور تعبیر کنید هیچ اشکالی نداره
به این لینک هم می تونید مراجعه کنید


en.wikipedia.org/wiki/Reference_(computer_science)