PDA

View Full Version : سوال: چرا برای بعضی از کلاسها مثل Form باید new کنیم و برای بعضی دیگر مثل Array نباید new کنیم



m.lajevardi
پنج شنبه 24 اسفند 1391, 09:24 صبح
سلام علیکم
در #c چرا برای بعضی از کلاسها مثل Form باید new کنیم و برای بعضی دیگر مثل Array نباید new کنیم
آیا قاعده ای وجود دارد.
ممنون از راهنمائی های شما دوستان

erfan_urchin
پنج شنبه 24 اسفند 1391, 09:31 صبح
تا اونجایی که من یادمه استادمون در مورد این سوال جواب داد که اون کلاس هایی که لازم نیست new کنیم مثل Console یا Array این کلاس هایی هستند که به صورت public static تعریف شدند
اما اون کلاس هایی که لازمه ازشون شی تعریف بشه مثل Form کلاس هایی هستند که به صورت public تعریف شده. یعنی:

برای این ها لازم نیست new کنیم
public static class test
{
}
برای اینها لازمه new کنیم
public class test
{
}

m.lajevardi
پنج شنبه 24 اسفند 1391, 09:50 صبح
ممنون
ولی از کجا بفهمیم کدام public تعریسف شده اند و کدام public static

alexmcse
پنج شنبه 24 اسفند 1391, 09:57 صبح
ممنون
ولی از کجا بفهمیم کدام public تعریسف شده اند و کدام public static

داخل پنل object browser یا f2

erfan_urchin
پنج شنبه 24 اسفند 1391, 10:03 صبح
یه راه دیگه هم اینه که هر کلاسی رو که مخواین ببینین باید new کنید یا نه برید توی سایت http://www.msdn.microsoft.com و اون کلاسو سرچ کنید
مثلا اگه شما برید سرچ کنید Console میبینید که تو قسمت syntax برای زبون C#‎ همچین چیزی نوشته
public static class Console
این یعنی نیازی نداره شی تعریف بشه
این لینک مال کلاس Console هستش میتونید خودتون برید ببینید http://msdn.microsoft.com/en-us/library/system.console.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1

m.lajevardi
پنج شنبه 24 اسفند 1391, 10:29 صبح
دوست گرامی : کلاس color هم public تعریف شده ولی نباید new کنیم ! دلیلش چیه ؟

erfan_urchin
پنج شنبه 24 اسفند 1391, 10:56 صبح
[SerializableAttribute]
[TypeConverterAttribute(typeof(ColorConverter))]
public struct Color
اینجا این همه کد نوشته شما فقط public رو دیدین؟؟؟!!! :لبخند:
این public نیست public struct هستش
احتمالا علاوه بر public struct، public static هم این قابلیت رو به کلاس میده که ازش شی نسازیم
من تا همین حد اطلاعات داشتم در مورد کلاس هایی که شی ازشون تعریف نمیشه
دیگه اگه به جوابتون کامل نرسیدین ببخشید

m.lajevardi
پنج شنبه 24 اسفند 1391, 11:18 صبح
پس میتوان گفت public calss باید new شوند و بقیه نیاید new شوند چون کلاس Image هم از نوع
public abstract class تعریف شده است و احتیاجی به new ندارد.
ممنونم از راهنمایی های خوبتان.

erfan_urchin
پنج شنبه 24 اسفند 1391, 11:27 صبح
پس میتوان گفت public calss باید new شوند و بقیه نیاید new شوند چون کلاس Image هم از نوع
public abstract class تعریف شده است و احتیاجی به new ندارد.
ممنونم از راهنمایی های خوبتان.

خواهش میکنم
وظیفه بود

gwbasic
پنج شنبه 24 اسفند 1391, 18:50 عصر
پس میتوان گفت public calss باید new شوند و بقیه نیاید new شوند چون کلاس Image هم از نوع
public abstract class تعریف شده است و احتیاجی به new ندارد.
ممنونم از راهنمایی های خوبتان.

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

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

شما پرسیدید که : در #c چرا برای بعضی از کلاسها مثل Form باید new کنیم و برای بعضی دیگر مثل Array نباید new کنیم
بطور خلاصه اگر عضو از کلاس به صورت استاتیک تعریف بشه ( چه متد باشه چه فیلد یا پراپرتی و ...) برای استفاده از اون نیاز نمونه سازی از کلاس (new کردن) نیست و برعکس اگر به صورت غیر استاتیک تعریف شده باشه حتما برای استفاده از آن باید نمونه ایجاد کرد.

نکته 1: اگر کلاس به صورت استاتیک تعریف شده باشه همه اعضای اون کلاس باید استاتیک تعریف شوند وگرنه در زمان کامپال خطا خواهید گرفت
نکته 2: Public و private و internal‌و ... سطح دسترسی به کلاس و یا اعضا رو مشخص می کنند یعنی اگر عضو استاتیک باشه اما private‌ تعریف بشه بیرون از کلاس به هیچ وجوه قابل دستیابی نخواهد بود (سطح دسترسی رو با (استاتیک و غیر استاتیک بودن) اشتباه نگیرید)
نکته 3: اگر کلاسی به صورت abstract تعریف شود از آن نمی توان نمونه ایجاد کرد. در نتیجه کلاس Image‌رو به صورت مستقیم به هیچ عنوان نمی تونید استفاده کنی و مثلا باید از کلاس Bitmap که اون رو به صورت کامل Implement کرده استفاده کنید (حالا abstract‌ چیه و چه کاربردی داره بماند)
نکته 4: struct مانند کلاس هست با کمی تفاوت

امیدوارم جوابتون رو گرفته باشید و در ادامه در زدن تاپیک دقت بشتری داشته باشید

tooraj_azizi_1035
پنج شنبه 24 اسفند 1391, 19:17 عصر
سلام
کدام Array رو نباید New کنیم؟

C#‎_best_Programmer
پنج شنبه 24 اسفند 1391, 19:40 عصر
داشم آرایم می تونی با سازندش مقدار دهی کنی اونایی که بدونه سازنده مقدار گرفتن عملگر مساوی و سر بار گذاری کردن:قلب: