PDA

View Full Version : توجیح این کد چیه؟



*unos*
چهارشنبه 20 آذر 1387, 08:56 صبح
با سلام


private void button1_Click(object sender, EventArgs e)
{
int i = 10;
MessageBox.Show("i is =" + i);
}

این تکه کد چرا پیغام cannot convert int to string رو نمی ده؟
چه توجیهی می تونه داشته باشد؟

dark-man
چهارشنبه 20 آذر 1387, 09:27 صبح
سلام . این کد توجیهی نداره . messagebox فقط رشته ها رو قبول می کنه . شما باید بنویسی i.tostring()
مسئله بعدی اینه که i رو با چی می خواد جمع کنه ؟ اگه جواب مورد نظر حاصل جمع یه عدد با i هست بهتره اونو خارج از messagebox انجام بدی نتیجه رو تو messagebox بذاری مثلا"






private void button1_click(object sender, eventargs e)
{
int i = 10;
int x = 15;
int y = i + x;
messagebox.show("y is = " y.tostring());
}

*unos*
چهارشنبه 20 آذر 1387, 09:39 صبح
ببینید حرف من اینه چرا این کد error نمی ده؟



private void button1_Click(object sender, EventArgs e)
{
int i = 10;
int x = 15;
int y = i + x;
MessageBox.Show("y is = " + y);
}

این کد رو کامپایل کنید متوجه میشید؟

dark-man
چهارشنبه 20 آذر 1387, 09:50 صبح
من هر موقع کدی شبیه به این رو نوشتم مسلما" خطا می گیره . مگر یک احتمال خیلی خیلی ضعیف این که خود messagebox متغیر y رو تبدیل به رشته کنه و نمایش بده و خطائی رو ایجاد نکنه . فقط همین به ذهنم می رسه .

*unos*
چهارشنبه 20 آذر 1387, 09:55 صبح
من هر موقع کدی شبیه به این رو نوشتم مسلما" خطا می گیره . مگر یک احتمال خیلی خیلی ضعیف این که خود messagebox متغیر y رو تبدیل به رشته کنه و نمایش بده و خطائی رو ایجاد نکنه

منم همینو میگم
حالا messagebox اصلا همچین قابلیتی داره؟
اگه نداره پس چرا error نمی ده؟

*unos*
چهارشنبه 20 آذر 1387, 10:21 صبح
اگه همچین قابلیتی داره چرا هیچ جا بیان نشده؟
این همه منبع این همه مطلب

mehdi.mousavi
چهارشنبه 20 آذر 1387, 11:30 صبح
اگه همچین قابلیتی داره چرا هیچ جا بیان نشده؟ این همه منبع این همه مطلب

سلام.
وقتی شما از Operator + برای جمع یک String و یک Data Type دیگه (در مثال شما، یک int) استفاده میکنید، C# ابتدا متود ToString رو روی int شما Call میکنه. همونطور که میدونید (؟) کلیه کلاسهای موجود در C# از Object مشتق شدن، در نتیجه همشون 4 میتود زیر رو پشتیبانی میکنن:



Equals
GetHashCode
GetTpe
ToString

در نتیجه قبل از اینکه عمل جمع انجام بشه، ابتدا متغیر int شما به String تبدیل میشه (توسط متود ToString) و سپس دو String با استفاده از اپراتور + با هم Concatenate میشن و بهم میچسبن.

این مساله ربطی به MessageBox و ... نداره.

پاورقی: شما میتونید Specification های Addition Operator زبان C# رو اینجا بخونید (http://msdn.microsoft.com/en-us/library/aa691375%28VS.71%29.aspx).