PDA

View Full Version : متغیر object چیست؟



forodo
دوشنبه 24 تیر 1392, 00:00 صبح
در کد زیر منظور از object چیست؟
این چه نوع متغیری است که int داخلش می توان ریخت؟

int[] numbers = { 12, 23, 34, 45, 56, 67 };
Object[] oNumbers = new Object[numbers.Length];
numbers.CopyTo(oNumbers, 0);
listBox1.Items.AddRange(oNumbers);

erfan_urchin
دوشنبه 24 تیر 1392, 00:53 صبح
object متغیری هستش که شما هر چیزیو میتونی توش بریزی.
منظورم از هرچیزی یعنی string ,int, ... و همچنین یه سری از متدها هستند که مقدار object برمیگردونن مثل ExecuteScalar, ExecuteReader, ... که شما باید اونو نسبت به نیازتون به int یا string تبدیل کنید
موفق باشید

forodo
دوشنبه 24 تیر 1392, 01:15 صبح
پس چرا فقط از object برای تعریف متغیرها استفاده نمی کنیم؟
اینجوری دیگه نیازی به تبدیل هم نداره و نگران اینکه فلان متغیر از چه نوعی هست نیستیم.

mhsmity
دوشنبه 24 تیر 1392, 01:17 صبح
پس چرا فقط از object برای تعریف متغیرها استفاده نمی کنیم؟
اینجوری دیگه نیازی به تبدیل هم نداره و نگران اینکه فلان متغیر از چه نوعی هست نیستیم.
یه علتش می تونه مدیریت حافظه باشه
چون وقتی نوع ها مشخص نباشد فضای بیشتری در حافظه استفاده می شه
البته الان با این سیستم های موجود دیگه این بحث اهمیت چندانی نداره

forodo
دوشنبه 24 تیر 1392, 01:22 صبح
یعنی اگه این کار رو بکنیم هیچ مشکلی توی برنامه نویسی و اجرای برنامه به وجود نمی آد؟

mousa1992
دوشنبه 24 تیر 1392, 01:30 صبح
بهتره یکم تحقیق کنی در مورد متغیر هایی از نوع var که در واقع خود کامپایلر نوع مقداری رو که بهش نسبت میدی تشخیص میده ؛ آما همه جا قابل استفاده نیست
object هر شی میتونه باشه بعضی جاها کاربرد داره مثلا شما ی متدی رو مینویسی که ی ارگومان داره و هر نوعی رو میتونه بگیره
سرچ کن مطلب زیاد پیدا میشه در موردشون


یعنی اگه این کار رو بکنیم هیچ مشکلی توی برنامه نویسی و اجرای برنامه به وجود نمی آد؟

تو پروژه های کوچیک فرقی نمیکنه - تو پروژه های بزرگ صد درصد برات مشکل ایجاد میکنه
موفق باشی

forodo
دوشنبه 24 تیر 1392, 01:50 صبح
تو این کد متغیر params چیه؟

private void ClearControls(params Control[] ctls)
{
foreach (Control ct in ctls)
{
ct.Text = "";
}
}

Mahmoud.Afrad
دوشنبه 24 تیر 1392, 03:21 صبح
در کد زیر منظور از object چیست؟
این چه نوع متغیری است که int داخلش می توان ریخت؟

همه انواع و کلاسهایی که تعریف شده و یا کاربر تعریف میکند از کلاس Object مشتق شده اند.
http://msdn.microsoft.com/en-us/library/9kkx3h3c.aspx


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


تو این کد متغیر params چیه؟
params کلمه کلیدی هست نه یک نوع یا متغیر.


وقتی که میخوای ارگومان متدتون ارایه باشه از params استفاده میکنید
نمیشه اینطور گفت. چون اگر کلمه کلیدی params رو هم حذف کنید باز هم ورودی از نوع آرایه است.

params زمانی استفاده میشه که تعداد پارامترها معلوم نباشه. در فراخوانی هم میتونید تعداد متغیری از آروگومان ها رو پاس بدید و یا حتی بدون آرگومان.
http://msdn.microsoft.com/en-us/library/w5zay9db%28v=vs.71%29.aspx

مهرداد صفا
سه شنبه 25 تیر 1392, 01:29 صبح
با سلام.


در کد زیر منظور از object چیست؟

کلاسی است که مادر تمام کلاسهای .net به شمار می رود. به بیان ساده همانطور که در دنیای واقعی هر چیز یک شی است در .net هم هر داده و کلاسی یک object است.



این چه نوع متغیری است که int داخلش می توان ریخت؟
(object دیگه!)
در دنیای واقعی یک میز و یک صندلی هر دو شی هستند. پس یک شی (و به طور کلی واژه شی) میتواند یک میز و یا یک صندلی باشد در حالیکه یک میز نمیتواند یک صندلی باشد. مصداق این قضیه در OOP موجود است. یک int و یک Bitmap هر دو از کلاس Object ارثبری می کنند و هر دو object هستند پس یک Object (مفهومی است که) میتواند یک int و یا یک Bitmap باشد در حالیکه یک int نمیتواند یک Bitmap باشد.
در عین حال ممکن است بگوییم یک میز و یک صندلی هر دو یک شی چوبی هستند و یک شی چوبی هم یک شی است (سلسله وراثت). پس یک شی میتواند یک شی چوبی باشد، یک میز باشد و یا یک شی فلزی باشد؛ در حالیکه یک شی فلزی (با اینکه یک شی است) نمی تواند یک میز (منظور چوبی) باشد.
مصداق این قضیه نیز در OOP موجود است. برای مثال یک Bitmap یک Image است، یک Image یک MarshalByRefObject است و یک MarshalByRefObject یک Object. پس یک Image میتواند (یا ممکن است) یک Bitmap باشد ولی نمی تواند یک int باشد اگر چه هر دو object هستند.



پس چرا فقط از object برای تعریف متغیرها استفاده نمی کنیم؟

الآن عرض میکنم خدمتتون.



اینجوری دیگه نیازی به تبدیل هم نداره و نگران اینکه فلان متغیر از چه نوعی هست نیستیم.

دقیقا به همین دو دلیل! نیاز به تبدیل و نگرانی از اینکه این متغیر از چه نوعی است.
در دنیای واقعی هر صندلی یک شی است ولی هر شی یک صندلی نیست، هر ایرانی یک انسان است ولی هر انسانی ایرانی نیست، هر Bitmap یک Object است ولی هر Object یک Bitmap نیست. حالا شما و من و کامپایلر باید از کجا بدانیم کدام شی Bitmap است؟
فرض کنید که در دنیای واقعی به میز و صندلی و همه چیز فقط شی بگوییم و نگران این نباشیم که منظورمان از شی چیست؟! قبل از هر چیز و در مرحله اول برای کسی که با او سخن می گوییم مشکل و ایهام به وجود می آید.
در برنامه نویسی نیز چنین حالتی ممکن است تشخیص نوع object را( که مفهومی معادل حداقل 4-5 هزار کلاس را پوشش می دهد) برای کامپایلر مشکل و یا حتی گاهی غیر ممکن کند. مثلا فرض کنید کلاس پدر و فرزند دارای متود ToString هستند که در هر یک عملکرد مختص به خود را دارد. بدون تبدیل کامپایلر قادر به تشخیص نیست که شما قصد اجرای کدام متود (پدر یا فرزند) را دارید.
از طرفی این موضوع میتواند برای شما و برنامه نویسان دیگر مشکل ساز باشد و کدها و کلاسها را پیچیده و غیر قابل فهم کند. (مشکلی که گاهی نوع varient در vb6 ایجاد می کرد).

forodo
چهارشنبه 26 تیر 1392, 00:24 صبح
در کد زیر:

using (StreamWriter w = new StreamWriter(fs, Encoding.UTF8))
{
w.WriteLine(124.23M);
w.WriteLine("Salaam!");
w.WriteLine('!');
}

منظور از using چیست؟
دنبال این قضیه گشتم ولی همشون در مورد usingای بود که می تونی از کتابخانه بیاری.

Mahmoud.Afrad
چهارشنبه 26 تیر 1392, 00:29 صبح
http://msdn.microsoft.com/en-us/library/yh598w02%28v=vs.80%29.aspx

مهرداد صفا
چهارشنبه 26 تیر 1392, 01:11 صبح
در کد زیر:

using (StreamWriter w = new StreamWriter(fs, Encoding.UTF8))
{
w.WriteLine(124.23M);
w.WriteLine("Salaam!");
w.WriteLine('!');
}

منظور از using چیست؟
دنبال این قضیه گشتم ولی همشون در مورد usingای بود که می تونی از کتابخانه بیاری.

با سلام.
بهتر بود در یک تاپیک مجزا مطرح شود تا دوستانی که بعدا جستجو میکنند به نتیجه برسند.
به هر حال این تاپیک (http://barnamenevis.org/showthread.php?352534-علت-استفاده-از-using-چیست-؟&p=1554508&viewfull=1#post1554508) را ببینید.