مردم جهان به دو دسته تقسیم می شوند دسته اول کسانی که موافقند مردم جهان به دو دسته تقسیم میشن و دسته دوم کسانی که مخالفند مردم جهان به دو دسته تقسیم میشن

وبلاگ آموزش سی شارپ

سلام خدمت همه شما دوستان عزیز که به من لطف داشتید و وبلاگ رو دنبال کردین...از مباحثی که قصد داشتم مطرح کنم
File,delegate,event
هنوز باقی مونده که احتمالاً تو تابستون می گم...شاید هم نگفتم هیچ وقت!:D
به هر حال ادامه آموزش رو تو درس ساختمان داده می گم! به آدرس زیر:
http://datastructurekelas.blogspot.com
تا اطلاع ثانوی موفق باشید!:D

۱۳۸۸ آبان ۸, جمعه

تفاوت کلاس و استراکچر

یاد یه بنده خدایی افتادم!
به اسم توماس!
یه کتاب ریاضی نوشت!
چند سال بعد خودش کتاب خودش رو گذاشت کنار و با یکی دیگه با نام فینی یه کتاب جدید نوشت و اسم کتاب رو هم گذاشتن توماس فینی!
حالا من هم دارم بعضی چیز هایی رو که خودم گفتم رو کنار می ذارم چیز هایی جدید رو جایگزینش می کنم!
تو قسمت آموزش کلاس گفتم که:
تفاوت کلاس و استراکچر
ساختارها انواع مقداري هستند و مستقيماً مقدار را در خود نگه مي‌دارند و از اينرو در stack نگه‌داري مي‌شوند. استفاده از ساختارها همانند ساير انواع مقداري است.

حالا می گم که کلاً این رو بذارین کنار!
Class و Structure پنج تفاوت مهم با هم دارن:
1. تایپ استراکچر Value هست! تایپ کلاس Ref
2. استراکچر به صورت default به صورت Public تعریف میشه ولی کلاس Private هست
3.کلاس توانایی وراثت داره ولی struct نداره!
4. کلمه this فقط در کلاس کار برد داره و کار می کنه و توی struct کار نمی کنه!
5.به Structure ها نمیشه به صورت مستقیم مقدار اولیه نسبت داد! باید از سازنده ها استفاده کرد!


به جرات می گم بهتون که تا حالا در هیچ سایت یا هیچ مقاله ای این پنج تفاوت با هم یکجا ذکر نشده! حتی اطمینان می دم که هیچ کودوم از استاد های دانشگاه ما هم این 5 مورد رو نمی دونن!
مؤید باشید

۱۳۸۸ مهر ۲۲, چهارشنبه

تفاوت Parse و Convert


خب! مبحث ارث و میراث تا همین جا باشه خدمتتون! چون بقیه اش مطالبی هست که من خودم هم هنوز خوب درکش نکردم!خنده

مطلبی که الان می خوام بگم در مورد Parse هست!
نمی دونم یادتون هست یا نه!
ما وقتی که می خواستیم یک متغیر رو بهش مقدار بدیم و از کی برد بخونیمش این کار رو می کردیم مثلاً:

x=Convert.ToInt32(Console.ReadLine());
حالا می خوایم یه طور دیگه این کار رو انجام بدیم!
اینطوری:
x=Int32.Parse(Console.ReadLine());
فرقشون چیه؟!
تو سایت MSDN نوشته که اگر یک استرینگ نال(بدون مقدار (Null)) رو به Convert بدیم! مقدار صفر رو بر می گردونه! ولی Parse این کار رو نمی کنه!
و تنها تفاوتشون هم تو همینه!

۱۳۸۸ شهریور ۳۱, سه‌شنبه

Override & Virtual

مطلبی که می خواستم بگم در مورد تابع virtual و override کردن بود!

از همون برنامه پایین! به این کد نگاه کنین:

class Kaaj : Dereakht
{
public virtual void derakht()
{
base.derakht();
Console.WriteLine("رشد به صورت طبقه طبقه برگهای سوزنی و همیشه سبز");
}
}

اگر ما درختی رو که می خوایم تعریف کنیم! از جنس کاج تعریف کنیم! مشکلی نداریم! اما اگه بگیم درخت اون وقته که خاصیت کاج براش نوشته نمیشه! یعنی خروجی برنامه فقط این میشه:
ریشه ، ساقه ، برگ
چرا این اتفاق میافته؟! واسه این که تابع کلاس کاج رو override نکردیم!

اما مال سرو رو نگاه کنین:


class Sarv : Kaaj
{
public override void derakht()
{
base.derakht();
Console.WriteLine("برگهای لطیف تر ، رشد منظم");
}
}
اگر سرو رو از جنس درخت تعریف کنیم خروجی برنامه این میشه:
ریشه ، ساقه ، برگ
برگهای لطیف تر ، رشد منظم

چرا این اینجوری میشه؟! برای این که تابع کلاسی رو که ازش سرو رو مشتق کردیم Virtual بوده و تابع سرو رو override کردیم! یعنی دیگه خاصیت های مال کاج رو نمایش نمیده! بلکه فقط خاصیت مربوط به سرو رو نمایش میده!
نکته مهم اینه که تا وقتی تابع کلاس پایه virtual نباشه نمی تونم تابع کلاس مشتق شده رو override کنیم!

مثل این هست که مثلاً بدن شما از نظر فیزیکی به پدرتون رفته! این 2تا حالت داره یا تابع بدن پدر شما Virtual نبوده واسه همین شما ناچراً ازش استفاده می کنین! یا این که Virtual بوده ولی شما می خواستید که بدنتون مثل پدرتون بشه!(البته بحث مربوط به استخوان بندی و دوران طفولیت داخل شکم مادره!( خنده )

اما در مورد اخلاقتون ، اخلاقتون به پدرتون رفته ولی رفتار های مربوط به خودتون رو هم دارین!
این یعنی این که متد اخلاق پدر شما Virtual بوده و شما ازش استفاده کردین و override کردینش و اخلاق های مربوط به خودتون رو هم بهش اضافه کردین!

البته این مثال خیلی دقیق نیست ولی کمک می کنه برای درک بیشتر!

۱۳۸۸ شهریور ۱۶, دوشنبه

نمونه برنامه وراثت

using System;
class Dereakht
{
public virtual void derakht()
{
Console.WriteLine("ریشه ، ساقه ، برگ");
}
}
class Tabrizi : Dereakht
{
public virtual void derakht()
{
base.derakht();
Console.WriteLine("بلند و دارای برگ های پهن");
}
}
class Kaaj : Dereakht
{
public virtual void derakht()
{
base.derakht();
Console.WriteLine("رشد به صورت طبقه طبقه برگهای سوزنی و همیشه سبز");
}
}
class Sarv : Kaaj
{
public override void derakht()
{
base.derakht();
Console.WriteLine("برگهای لطیف تر ، رشد منظم");

}
}
Blogged with the Flock Browser