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

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

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

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

مدیریت خطا ها

سه نوع خطا وجود دارد
1.bugs : ای خطا معمولاً از خطا های برنامه نویس است
2.user error: این خطا خطایه که از طرف کار بر ایجاد مثل مقدار نا مناسب دادن به یک فیلد
3.Exception: خطای غیر عادی که کنترل آن توسط برنامه نویس دشواره و نمی تونه به راحتی اون رو تشخصی بده

برای این که از شر این خطاها راحت بشیم باید اون قسمتی رو که احساس می کنیم خطا رخ میده رو مشخص کنیم با try بعد تو قسمت catch پیغامی رو که می خوایم که همون نوع خطا هست رو نشون بده می نویسیم و در آخر هم از finally استفاده می کنیم که چه در صورتی که خطا رخ بده و چه در صورتی که خطا رخ نده پیغامی رو نشون بده!

اما گاهی اطلاع داریم که چه اتفاقی ممکنه بیفته و برای این که پیغام خطا رو نشون بدیم یک شی از جنس اون خطا صدا می کنیم که وقتی که اون خطا رخ داد پیغام مربوط به اون نمایش داده بشه!
حالا یه چندتا مثالا نیگا کنیم!
class Program
{
public static void Main()
{
int[] myarray = new int[5];
try
{
for (int ctr = 0; ctr < 10; ctr++)
{
myarray[ctr] = ctr;
}
}
catch(Exception e)
{
Console.WriteLine(e);
}
Console.WriteLine("at end of class");
Console.ReadLine();
}
تو این مثال از قصد کاری کردیم که خطا ایجاد بشه طول رشته از طول حلقه for کمتره پس خطا داره!
و یک مثال هم با finally

public static void Main()
{
int[] myarray = new int[5];
try
{
for (int ctr = 0; ctr < 10; ctr++)
//or for (int ctr = 0; ctr < 4; ctr++)
{
myarray[ctr] = ctr;
}
}
catch (Exeption e)
{
Console.WriteLine(e);
Console.WriteLine(" exception caught");
}
finally
{
Console.WriteLine("done with exception handling");
}
Console.WriteLine("end of program");
Console.ReadLine();
}
امیدوارم که به درد بخور بوده باشه و از نظر من مهمترین فایده ای که داره اینه که بعد از وقوع خطا برنامه همچنان اجرا میشه و این واقعاً عالیه!

موفق و پیروز باشید!
Blogged with the Flock Browser

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

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

یاد یه بنده خدایی افتادم!
به اسم توماس!
یه کتاب ریاضی نوشت!
چند سال بعد خودش کتاب خودش رو گذاشت کنار و با یکی دیگه با نام فینی یه کتاب جدید نوشت و اسم کتاب رو هم گذاشتن توماس فینی!
حالا من هم دارم بعضی چیز هایی رو که خودم گفتم رو کنار می ذارم چیز هایی جدید رو جایگزینش می کنم!
تو قسمت آموزش کلاس گفتم که:
تفاوت کلاس و استراکچر
ساختارها انواع مقداري هستند و مستقيماً مقدار را در خود نگه مي‌دارند و از اينرو در 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

۱۳۸۸ شهریور ۱۳, جمعه

وراثت

خب...! امروز می خوام وراثت رو بگم !

اوایل این بحث مثل علم پزشکی می مونه!

شما یک کلاس اصلی یا پدر رو ایجاد می کنید! فرزند یا فرزندان اون کلاس ، کلاس هایی هستن که خاصیتی رو از کلاس اصلی به ارث می برن یا به زبون دیگه مشتق میشن! حالا اگه از اون کلاس های مشتق شده ما فرزند یا فرزندان دیگه ای رو مشتق کنیم این فرزندان هم خاصیت پدر خودشون رو دارن و هم خاصیت کلاس اصلی رو دارن!

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

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

حالا یه مثال می زنم فردا هم با برنامه یه مثال می زنم که خوب متوجه بشید!

ما می خوایم فاییده ی وراثت رو بدونیم!

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

این هم مقدمات بحث وراثت Smile

برای این که خستگیتون هم در بره 2تا عکس براتون می ذارم!دسته گل
این عکس ها برای اینه که متوجه بشید منظورم از طبقه طبقه و منظم رشد کردن چیه:پیرمرد
کاج: http://www.botaniewebsite.nl/araucaria/a...hylla1.jpg
سرو: http://upload.wikimedia.org/wikipedia/co...tricta.jpg
Blogged with the Flock Browser

۱۳۸۸ شهریور ۷, شنبه

readonly , GC.Collect

چیز هایی که امروز می خوام خیلی چیز های مهمی نیستن...البته فعلاً بعداً بیشتر کاربرد پیدا می کنن

کلمه کلیدی readonly

همون طور که قبلاً هم گفتم این که کمترین سطح دسرسی رو برای هر چیزی قائل بشیم از اصول مهندسی نرم افزار خوب هست!

این کلمه کلیدی کاری که می کنه اینه که متغیر رو فقط یک بار میشه بهش مقدار داد و دیگه کار دیگه ای روش نمیشه کرد!

private readonly int real;


مثل بالا هم ازش استفاده میشه!

مورد بعدی پاکسازی حافظه هست!

تو ++C ما هر وقت می خواستیم حافظه رو پاک می کردیم! اما تو #C پاکسازی حافظه خود به خود صورت می گیره و ما فقط می تونیم کاری کنیم که زود تر حافظه پاکسازی بشه! ولی زمانش رو نمی تونیم تعیین کنیم! با استفاده از متد GC.Collect این کار رو انجام می دیم! اون هم به این صورت که اسم متد اسم سازنده و کاراکتر هم نداره مثلاً سازنده Mydate رو که قبلاً هم داشتیم به این صورت پاکسازیش رو سریع تر می کنیم:

~mydate()
{
}

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

۱۳۸۸ شهریور ۱, یکشنبه

enumeratiom

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

enum Days { sat , sun , mon , tue , wed , thu , fri }

Days اسمش هست!

مقادیرشون هم:
sat = 0
sun = 1
mon = 2
tue = 3
wed = 4
thu = 5
fri = 6

یکی از ویژگی هاش اینه که ما می تونیم مقدار دهی رو خودمون انجام بدیم!

enum Days { sat=5 , sun , mon , tue , wed=11 , thu , fri }

مقادیرشون هم:
sat = 5
sun = 6
mon = 7
tue = 8
wed = 11
thu = 12
fri = 13

این مقدار ها به طور پیش فرض با int مقدار دهی میشن! ولی خودمون می تونیم تغییر بدیم! مثلاً:

enum Days : long { sat , sun , mon , tue , wed , thu , fri }

یک برنامه ساده :

using system;
enum Days : short
{
sat , sun , mon , tue , wed , thu , fri
}
class Program
{
{
static void Main()
for( Days d = Days.sat ; d <= Days.fri ; d++ )
Console.WriteLine(d);
}
}

یا Constructors سازنده ها

سلام!

امروز می خوام سازنده ها رو بگم!

سازنده ها چی هستن؟!

سازنده ها تنها کاری که می کنن اینه که مقدار دهی اولیه میکنن!

مثلاً شما یک کلاس نوشتی که چهار تا متغیر داره که باید مقدار دهی بشن! ممکنه کاربر 3تاش رو وارد نکنه! در این صورت یا باید پیغام خطایی بهش نشون بدین که بگین داداش این ها رو وارد کن! یا این که باید به صورت پیش فرض مقادیری رو خودتون وارد کنید!

و این سازنده ها هیچ کار دیگه ای انجام نمیدن! نذاشتی هم نذاشتی! ولی چیز مفیدیه
این طوری هم تعریف میشن که اسم کلاس اولش یه سطح دسترسی می ذاریم و متغیری که می خوایم مقدار دهی کنیم معرفی می کنیم!

مثلاً:

using system;
calss MyDate
{
private int year , month , day ;
public MyDate() : this(1 , 1 , 1) { }
public MyDate(int y) : this(y , 1 , 1) { }
public MyDate(int y , int m) : this(y , m , 1) { }
public MyDate(int y , int m , int d)
{
Year = y ;
Month = m ;
Day= d ;
}
و بقیه برنامه!
حالا تک تک توضیح می دم:
public MyDate() : this(1 , 1 , 1) { } :
اگر کاربر هیچ مقداری رو وارد نکنه برای سه تا متغیر year , month , day مقدار یک رو وارد می کنه!

public MyDate(int y) : this(y , 1 , 1) { }
اگر کاربر فقط مقدار سال رو وارد بکنه برای 2تا متغیر دیگه مقدار یک پیش فرض قرار داده میشه!

public MyDate(int y , int m) : this(y , m , 1) { }
اگر کاربر مقدار سال و ماه رو وارد کنه مقدار روز رو به صورت پیش فرض یک قرار میده!

public MyDate(int y , int m , int d)
{
Year = y ;
Month = m ;
Day= d ;
}

این جا کاربر هر 3تا مقدار رو وارد می کنه تمام سازنده های قبلی بعد از اجرا شدن به این قسمت میان تا مقدار متغیر های تازه تعریف شده مشخص بشه و بزرگ شدن حروف اول year , month , day برای همون مساله محدودیت دسترسیه! این طوری دیگه نیازی نیست که property تعریف کنید براشون!

Blogged with the Flock Browser

۱۳۸۸ مرداد ۲۷, سه‌شنبه

property

خب اما Property ها یا ویژگی ها به قول یه آقای بسیار محترمی ووژگی:D

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

پس طبق مطلب قبلی میایم کلاسمون رو این طوری تعریف می کنیم:

using system;
class Complex
{
private double real , img ;
.
.
.
.
.
........
}

خب! همون طور که گفتم private فقط تو خود کلاس قابل دسترسیه!یعنی فقط تو کلاس Complex
حالا اگه بخوایم توی کلاس Program از این ها استفاده کنیم تکلیف چیه؟! مثلاً بخوایم بگیم:

Complex c1 = new Complex () ;
c1.real = 3;
c1.img = 4;

خب اینجا کامپایلر یکی از انگشت هاش رو به ما نشون میده که ممکنه معنی خیلی خوبی نداشته باشه! پس باید چی کار کنیم که این کار رو نکنه؟!
میایم از ویژگی یا Property استفاده می کنیم:

using system;
class Complex
{
private double real , img ;
public double Real
{
get
{
return real ;
}
set
{
real = value ;
}
}
public double Img
{
get
{
return img;
}
set
{
img = value;
}
}
.
.
.
.
.
.
..........
}

همون طور که می دونی C# به حروف بزرگ و کوچیک حساسه! پس برای این که بتونیم از متغیر هایی که private تعریفشون کردیم تو برنامه اصلیمون استفاده کنیم میایم proprty هایی میسازیم با همون اسم با این تفاوت که حرف اولش حرف بزرگه! البته این استانداردشه وگرنه شما اسمش رو بذار جومونگ! اگه کسی بهت چیزی گفت فقط تو برنامه اصلی برای این که دسترسی داشته باشی باید از جومونگ استفاده کنی!
پس برای این که به c1 مقدار بدیم این کار رو می کنیم!:

Complex c1 = new Complex () ;
c1.Real = 3 ;
c1.Img = 4 ;
به حروف بزرگ و کوچیک Real , real و Img , img توجه کنید!

حالا مثلاً جومونگ تعریف می کنیم!:

public double jumoong
{
get
{
return real ;
}
set
{
real = value ;
}
}
public double joomong
{
get
{
return img ;
}
set
{
img = value ;
}
}

تو program باید این طوری استفاده کنیم:

Complex c1 = new Complex () ;
c1.jumoong = 3 ;
c1.joomoong = 4 ;

-----------------------------------------------------
set برای گرفتن مقدار هست یعنی اگر set نباشه نمی تونیم مقداری رو به real , img بدیم!
get هم برای دسترسی هست ! البته کاربرد های قشنگ تری هم داره که بعداً بهش می رسیم!

Blogged with the Flock Browser

برخی از مفاهیم

public:
چه تابع باشه چه متغیر باشه همه بهش دسترسی دارن!

private:
فقط در خود کلاس بهش دسترسی داریم!

protected:
فقط توی برنامه بهش دسترسی داریم مربوط میشه به بحث dll

stack:
خب این یه قسمتی از حافظه هست که مقادیری توش ذخیره میشه یه نوع reference و نوع دیگه value هست دقیقاً نمی دونم ولی فکر کنم reference به یک قسمت از stack اشاره می کنه و value مقدار رو تو خودش نگه میداره!  دوستانی که وارد تر هستن کمک کنن ممنون میشم!

static:
یکی از خواص توابع هست! وقتی یک تابه رو static تعریف می کنیم که تابع مربوط به یک شی باشه! مثلاً تابع جمع استاتیک تعریف نمی کنیم! ولی مثلاً تابعی که می خواد مقدار real و image یک عدد مختلط رو بخونه رو استاتیک تعریف میکنیم!

فعلاً چیز دیگه ای به ذهنم نمیرسه! اگر رسید اضافه می کنم تو همین پستم! 
Blogged with the Flock Browser

۱۳۸۸ مرداد ۲۰, سه‌شنبه

یه برنامه با کلاس

خب! گفتم که اول یک برنامه با کلاس بنویسم که ببینی چه جوری میشه! مطلب بعدی رو در مورد یه سری مفاهیم می خوام بگم مثل
public
satic
stack
private
.
.
.
.....

فایل Complex.cs شامل تعریف تایپ Complex

using System;
class Complex
{
public double real, img;
public void Read()
{
Console.WriteLine("Real:");
real = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("img:");
img = Convert.ToDouble(Console.ReadLine());
}
public static Complex plus(Complex c1, Complex c2)
{
Complex c3 = new Complex();
c3.real = c1.real + c2.real;
c3.img = c1.img + c2.img;
return c3;
}
public void Write()
{
char sign;
sign= (img > 0) ? '+' : '-';
Console.WriteLine("{0}{1}{2}i",real,sign,Math.Abs(img));
}
}

فایل Program.cs شامل متد Main

using System;

class Program
{
static void Main()
{
Complex c1=new Complex();
Complex c2 = new Complex();
Console.WriteLine("Complex Number 1:");
c1.Read();
Console.WriteLine("Complex Number 2:");
c2.Read();
Complex c3;
c3 = Complex.plus(c1, c2);
Console.WriteLine("result : ");
c3.Write();
Console.Read();
}
}
سوال: چرا c3 مثل c2 , c1 تعریف نشده؟!
جواب: به عهده دانش آموز می باشد:D
جواب: c3 رو می تونیم مثل اون 2تایه دیگه هم تعریف کنیم! هیچ مشکلی پیش نمیاد! اما از اونجایی که می خوایم بهش مقدار بدیم هیچ احتیاجی نیست که اون رو به صورت یک شی طریف کنیم و می توینم به صورت یک متغیر از جنس اعداد مختلط تعریف کنیم!
حالا اگه همین طوری که نوشتیم بخوایم به c3 مقدار بدیم! یعنی این طوری:
c3.real=0;
c3.img=2;

این طوری هم مشکل داره! درسته که ما به c3 مقدار می دیم اما به خودش مقداری نمی دیم به اجزائش مقدار میدیم! برای همین زمان اجرا کردن به شما می گه c3 مقداری نداره!
Blogged with the Flock Browser

ایجاد یک کلاس

خب!

حالا می خوایم یک کلاس از جنس اعداد مختلط درست کنیم!

class Complex
{
public double real , img ;
}

خب اولین چیزی که به ذهنتون می رسه اینه که الاف کردی ما رو؟!این که همون struct هست

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

اولین تفاوتشون مربوط به سازنده ها هست! چون هنوز نگفتم سازنده ها رو توضیحی در موردش نمی دم

مورد بعدی اینه که وقتی که یک کلاس میسازیم از اعداد مختلط می توینم مقدار دهی اولیه اش بکنیم! ولی struct رو نمی تونیم!

مثلاً
class Complex
{
public double real = 0;
public double img;
}
در مورد بالا مشکلی به وجود نمیاد!
اما:
struct Complex
{
public double real = 0;
public double img;
}
اینجا ما مشکل داریم : خطای زمان کامپایل

خب! حتماً الان دارین می گین که وای وای چه تفاوت مهمی! ولی در واقع خیلی مهم تر از اونیه که به نظر میاد

یک جمله کلیدی:
ساختارها انواع مقداري هستند و مستقيماً مقدار را در خود نگه مي‌دارند و از اينرو در stack نگه‌داري مي‌شوند. استفاده از ساختارها همانند ساير انواع مقداري است.
( http://learn.hge.ir/?name=learn_csharp.net_12 )

خب! stack نمی دونی چیه؟! stack یه قسمت از حافظه هست! اگر اطلاعات بیشتری می خوای این بار خودت باید بری بگردی! و بفهمی که چی هست! چون استک مربوط به بحث های قبل میشه و بخوام برگردم توضیح بدم نمیشه دیگه! خودت برو پیدا کن! البته اگه واقعاً نیاز داشتی بگو تا بگم! البته بعداً در موردش حتماً توضیح می دم ولی بعداً کی هست نمی دونم!

Blogged with the Flock Browser

۱۳۸۸ مرداد ۱۵, پنجشنبه

پیوست پست قبلی

فایل Complex.cs شامل تعریف ساختمان Complex

برای ساختن این فایل تو قسمت solution Explorer اسم پروژه که احتمالاً ConsoleApplication هست کلیک راست می کنیم و add و بعد class رو می زنیم و یک کلاس اضافه می کنیم و توی کلاسمون هرچی هست پاک می کنیم و اون چیزی رو که تو قسمت قبل نوشتم رو paste می کنیم!

out

ما وقتی که یک تابع داریم با return فقط یک چیز رو می تونیم برگردونیم اما این جا ما احتیاج داشتمی که مقدار حقیق و تصویر عدد مختلط رو برگردونیم برای این که از out استفاده می کنیم!

(c.img> 0) ? '+' : '-';

این قسمت همون دستور If هست که این می تونیم این طوری هم بنویسیم:

if(c.img> 0)
+
else
-

Blogged with the Flock Browser

تایپ struct

این شاید مقدمه ای باشه برای بحث شی گرا این تایپ رو به صورت زیر تعریف می کنیم

struct structuer-type-name
{
public data-type field;
public data-type field;
...
...
...
public data-type field;
}

مثلاً می خوایم با این تایپ اعداد مختلط رو بیان کنیم!
(اگر نمی دونی عدد مختلط چیه بگو تا یه مثال دیگه بزنم!)
struct Complex
{
public float real;
public float img;
}

float مربوط به مقادیر اعشاری هست!
حالا ما یک شی از یک عدد مختلط داریم
همون طور که در قسمت مفهوم شی گرا گفتم این مثل یک طرح یا نقشه از یک عدد مختلط می مونه! و برای این که بتونیم ازش استفاده کنیم یک عدد مختلط نیاز داریم نه طرح یک عدد مختلط! پس یک عدد مختلط می سازیم!

Complex c1 = new Complex ()

حالا یک عدد مختلط داریم به اسم c1
حالا می تونیم با عدد مختلط کار کنیم! مثلاً یه سری مقدار بهش بدیم و معرفیش کنیم!

c1.real = 2.3 ;
c1.img = 1 ;

حالا برای این که بهتر متوجه بشیم یه برنامه می نویسیم!
فایل Complex.cs شامل تعریف ساختمان Complex
using system;
struct Complex
{
public double real,img;
}
////////////////////////
فایل Program.cs شامل متد Main
using system;
class Program
{
static void Main()
{
Complex c1 , c2 ;
Console.WriteLine ("Complex Number 1 :");
ComplexRead (out c1);
Console.WriteLine ("Complex Number 2 :");
ComplexRead (out c2);
Complex c3;
c3 = ComplexPlus ( c1 , c2);
Console.Write("The result complex number: ");
ComplexWrite(c3);
}
public static void ComplexRead(out Complex c)
{
Console.Write("Real:");
c.real = Convert.ToDouble(Console.ReadLine());
Console.Write("img(image):");
c.img = Convert.ToDouble(Console.ReadLine());
}
public static void ComplexPlus(out Complex c1 , out Complex c2)
{
Complex c3;
c3.real = c1.real + c2.real;
c3.img= c1.img + c2.img;
return c3;
}
public static void ComplexWrite(out Complex c)
{
char sign;
sign = (c.img> 0) ? '+' : '-';
Console.WriteLine("{0} {1} {2}i",c.real,sign,Math.Abs(c.img));
}
}
قسمت هایی که قرمز شده احتیاج به توضیح داشت که توی پیوست و پست بعدی توضیحاتش رو نوشتم!
پیوست


Blogged with the Flock Browser

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

مفهموم شی گرا

خب می خوایم مفهموم شی گرا رو بررسی کنیم!

با یه مثال شروع می کنم!

ما یه نقشه داریم که توش نقشه یک آشپزخونه هست

حالا ما می خوایم غذا درست کنیم

برای غذا درست کردن قطعاً نمی تونیم از آشپزخونه ای که تو نقشه هست استفاده کنیم! باید یک نمونه از روی نقشه آشپرخونه بسازیم تا بتونیم توی اون آشپرخونه غذا درست کنیم!

پس ما یک شی داریم به اسم آشپزخونه و برای استفاده از اون باید یک شی بسازیم از روی آشپزخونه

یعنی این که نقشه آشپزخونه مفهوم و ویژگی های آشپزخونه هست! ولی برای ساختن آشپزخونه باید یک شی از روی آشپزخونه بسازیم


یا مثلاً می گیم که هرچیزی که ارتفاعش بیشتر از یک متر باشه و 4تا پایه هم داشته باشه مثلاً میزه این مفهوم و ویژگی شی میزه! حالا واسه این که یک میز داشته باشیم باید با استفاده از مفاهیم شی میز یک میز بسازیم!

ما در برنامه نویسی شی گرا اول شئی رو که می خوایم ازش استفاده بکنیم رو ویژگی هاش رو می گیم و بعد ازش استفاده می کنیم!

مثلاٌ ما تو یه برنامه احتیاج داریم که اسم طرف رو بگیریم و سن طرف رو!
برای این کار می گیم که یک شی تعریف می کنیم به اسم مشخصات!

می گیم شی مشخصات شامل اسم طرف و سن طرف هست!

و هروقت که بخوایم اسم و سن طرف رو بگیریم! میگیم یک شی مشخصات بساز که خودش خود به خود شامل اسم و سن طرف هست!

موفق باشی!

شی گرا
Blogged with the Flock Browser

۱۳۸۸ اردیبهشت ۱۹, شنبه

void

البته توابعی هم هستن که هیچ مقداری رو بر نمی گردونن!
که باید void باشن

مثلاً
public static void Sort(int []a)
{
int temp;
for(int i = 1 ; i < i.Length ; i++)
for(int j = 0 ; j < a.Length-i ; i++)
if ( a[j] > a[j+1] )
{
temp = a[j];
a[j+1] = a[j];
a[j+1] = temp;
}
}

فعلاً تمام توابع رو
public , static
در نظر می گیریم تا بعداً سر فرصت بگم که چی هستن و چی کار می کنن که بتونیم تغییرشون بدیم!

Blogged with the Flock Browser

توابع method

سلام!
امروز می خوام توابع رو بگم!

توابع باید یه سطح دسترسی داشته باشن و یه مقداری رو برگردونن اگه یه اسم داشته باشن...متغیر هایی رو که می خوایم بهشون پاس بدیم رو باید تعریف کنیم

مثلاً Search تو بخش قبلی به این صورت در میاد تابعش!



حالا وقتی که می خوایم به یه برنامه متصلش کنیم این طوری متصل می کنیم!
البته این روش خیلی ابتدایی...در روش های پیشرفته ما تو یک کلاس توابع رو تعریف می کنیم و استفاده می کنیم و و تو سطوح بالاترش با dll ها این کار رو می کنیم!

یه چیز دیگه هم این که...حجم برنامه ها داره زیاد میشه...دیگه به صورت عکس نمی تونم بذارمشون...با google doc احتمالاً نشون میدم!

موفق باشی!

Blogged with the Flock Browser

۱۳۸۸ اردیبهشت ۱۷, پنجشنبه

Array آرایه

سلام!

دیر شد یکم! شرمنده!

آرایه یه مجموعه از یک نوع متغییره!

مثلاً آرایه ای از Int ها , یا تو بحث هایه بالاتر مثلاً یه آرایه از ماشین ها و غیره...!

آرایه ها رو این طوری تعریف می کنیم!

int [] a = new int [n];
حالا n چیه؟!
وقتی داری یک آرایه رو می سازی باید بگی که چندتا چیز از اون نوع می خوای داشته باشی؟!
n رو می تونی با همون روش قبلی از کاربر دریافت کنی یا این که یه عدد بدی بهش مثلاً
int[] a = new int [7];
حالا چه جوری مقدار دهی کنیم آرایه ها رو؟
چگانه؟ اینگانه: حالت ابتدایی این طوریه:
آهان قبلش یه چیزی...شماره خونه آرایه ها از صفر شروع میشه! این عکس رو نگاه کن(طبق معمول اگه کلیک کنی بزرگ میشه!)
حالا مقدار دهیش هم این طوریه:
a [0] = 12;
a [1] = 45;
a [2] = 78;
a [3] = 7;
a [4] = 1;
a [5] = 0;
a [6] =4 ;
روش معمولش اینه:
for (int i =0; i < a . Length ; i++ )
2 تا برنامه مفید و کاربردی هست در مورد آرایه ها!
sort :


یه قسمتش تو عکس معلوم نیست! اینه:
Console.WriteLine("Sort : ");
for (int i =0; i < a . Length ; i++ )
Console.Write(" {0} ",a[i]);
Console.Read();

Search :

۱۳۸۸ فروردین ۳۰, یکشنبه

do...while

سلام!

این هم یکی از حلقه هایه تکراره که کارش مثل while هست!
تفاوتی که داره اینه که یکبار حلقه رو انجام میده...بعد شرط رو بررسی می کنه! این طوری هم هست!:
do
{
...
}
while(شرط حلقه);
این مثال انقدر از کاربر عدد می گیره تا کاربر خسته شه بره بخوابه!:D:D:D
این مثال از کاربر عدد می گیره و با هم جمع میکنه تا وقتی که کاربر عدد صفر رو وارد کنه اگه وارد نکنه اتفاق بالا براش میافته!;)
این حلقه تکرار کاربرد هایه محدودی داره...من تاحالا بهشون بر نخوردم!


حلقه های تکرار!

حلقه هایه تکرار برایه اینه که یه کاری رو بخوایم چند بار انجام بدیم!
مثل محاسبه فاکتوریل با جمع و ضرب و ... چندین عدد یا خیلی چیز هایه دیگه! که بعداً تو برنامه ها باهاشون کار می کنیم!
حلقه for
for(تغییرات روی شمارنده;شرط حلقه;مقدار اویه شمارنده)
{
}
Ex.
for(int i =0;i<10;i++ )
این حلقه برای حالتی به کار میره که تعداد چرخش حلقه رو می دونیم

این برنامه n تا عدد رو میگیره و با هم جمع می کنه!
حلقه بعد:
while(شرط حلقه)
{
}
این برنامه تعداد رقم هایه عددی رو که بهش می دی حساب میکنه
یادت باشه ++ یک واحد اضافه می کنه


۱۳۸۸ فروردین ۲۹, شنبه

if...else

امروز می خوام در مورد if و else براتون بگم!
دستور if شرطی رو بررسی می کنه! اگه درست باشه یک دستور رو انجام میده اگر درست نباشه اون شرط دستور دیگه ای رو انجام میده! که دستور دوم تویه else نوشته شده! توجه کن که if هیچ لزومی نداره که بعدش else داشته باشه!

من این برنامه رو یه بار با if & else نوشتم...یک بار هم با دستور switch case !

این برنامه اگر عدد 1 رو بهش بدید one می نویسه 2 رو بدید two و 3 رو بدید three و سایر اعداد رو بدید other تحویلت میده!
تو شکل بهتر می تونی ببینی! طبق معمول اگه کلیلک کنی بزرگ میشه!

۱۳۸۸ فروردین ۲۸, جمعه

مقدمات!

برای شروع کار باید visual studio رو نصب کنی! من پیشنهاد می کنم که CD رو تهیه کنی!

برای شروع:
create project => visual C# => Console application => OK

اولین کد رو داریم:
using system;
یادت باشه که بعد از هر کدی که می نویسی باید یه ; بذاری!
system یک کلاس از پیش تعریف شده هست که یه سری کد رو در اختیار ما قرار میده! با نوشتن عبارت بالا دسترسی ما به اون کدها راحت تر میشه!
namespace Csharpkelas
}
.....
{
namespace اسم پروژه و برنامه ات رو مشخص می کنه! هر چی که خواستی می تونی بذاری!

Class program
{
.....
}
Program یه اسمه که می تونی به دلخواه خودت تغییرش بدی...! ولی این اسم استاندارد هست!
static void Main()
{
......
}
این جا کد هایه مربوط به برنامه رو می نویسی! تمام مراحل قبل تشریفاتی بود که قبل از نوشتن هر برنامه باید انجام بشه!(البته فعلاً)
حتماً الان می گی که الان تو Visual studio کد هایی هست که تو وبلاگت نیست! حق با تو هست! اما یه اصلی هست تو برنامه نویسی و اون اینه که چیزی رو که نمی دونیم به چه کاری میاد رو نمی نویسیم! در مورد static void Main هم تو قسمت توابع توضیح می دم!

حالا این رو داریم!
using System;

namespace Csharpkelas
{
class Program
{
static void Main()
{
}
}
}
تو C# واسه هر متغیری نوعی تعریف می کنیم...یعنی می گیم که چی نوع داده ای می خواد توش قرار بگیره!
الان از int استفاده می کنیم...هر جا که نوع جدید احتیاج بود توضیحش رو میدم! int فقط اعداد صحیح تا 10 رقمی رو می تونه تو خودش نگه داره!
چند کد مهم:
Console.Write("Csharpkelas") یا Console.WriteLine("Csharpkelas")
این کد باعث میشه چیزی رو که تو پرانتز نوشتی رو نمایش بده!
Console.Read() یا Console.ReadLine()
از کابر ورودی می خواد!
Convert.ToInt32(Console.Read())
این کد میگه که متغیری که باید از طریق کاربر داده بشه از چه نوعی باید باشه!

حالا می خوایم یه برنامه بنویسیم که از کاربر 2تا عدد بگیره و با هم جمع کنه!
using System;

namespace Csharpkelas
{
class Program
{
static void Main()
{
int adad1 , adad2 ,jam;
Console.WriteLine("2ta adad begoo!");
adad1=Convert.ToInt32(Console.ReadLine());
adad2 = Convert.ToInt32(Console.ReadLine());
jam = adad1 + adad2;
Console.WriteLine("{0}+{1}={2}", adad1, adad2, jam);
Console.Read();
}
}
}
آخرین کد برایه اینه که پنجره ای که برنامه داره توش اجرا میشه و نشون داده میشه بعد از زدن یه دکمه بسته بشه!
کد یکی مونده به آخر رو اگه نفهمیدی تو نظرات بگو!
اگه می خوای تمرین کنی یه برنامه بنویس که 3 تا مقدار بگیره و بزرگترینش رو نشون بده!
متغیر ها هم که adad1 , adad2 تعریف کردم واسه این بود که بفهمی هرچی بخوای می تونی بذاری ولی استاندار از a,b شروع میشه!
توضیحات تو عکس هم می تونه مفید باشه! کلیک کنی بزرگ میشه!




۱۳۸۸ فروردین ۲۷, پنجشنبه

آموزش #C

سلام دوست من!

امیدوارم که تا امروز به خواسته هات رسیده باشی!

من دانشجوی دانشگاه آزاد تهران جنوب رشته نرم افزارم! و تو درس برنامه نویسی مشکلاتی دارم!

من برای این که هم خودم یاد بگیرم هم به کسایی که علاقه دارن #C یاد بگیرن کمکی کرده باشم به پیشنهاد یکی از اساتید(استاد مبانی و پایگاه داده ها دانشگاه تهران جنوب دانشکده فنی!) تصمیم گرفتم این وبلاگ رو بسازم!

به امید روزی که همه از وقتی که داریم به خوبی استفاده کنیم!

راستی...آدرس وبلاگ رو مسخره نکن...اسم هایه درست و حسابی رو اجازه نمی داد!;)