مقدمات برنامه نویسی با C#

  • شروع کننده موضوع
  • #1

trustme

لنگر انداخته
ارسال‌ها
2,810
امتیاز
900
نام مرکز سمپاد
شهید بهشتی
شهر
کاشان
سال فارغ التحصیلی
1387
دانشگاه
دانشگاه خواجه نصیر طوسی
رشته دانشگاه
مهندسی مکانیک
قراره توی این موضوع به آموزش مقدماتی C#.net 2008 بپردازیم. البته C# چون از خانواده ی C هست خیلی خیلی شبیه به C است. ولی باز مجبوریم برای کامل بودن این آموزش ها موارد تکراری رو بگیم (تا جایی که بشه حذف می کنم!)
چیزایی که خواهیم خوند:
1- انواع داده و نوع نوشتاری آن
2- معرفی متغیر ها و مقدار دهی آنها
3- ایجاد انواع داخلی به کمک کلمه کلیدی new
4- تبدیل کردن رشته به مقدار ها
5- کاراکتر های گریز
(بقیه در پست های آینده)

6- رشته ها و برابری آنها
7- نوع System.Text.StringBuilder
8- تبدیلات گسترش دهنده و محدود کننده

9- فعال سازی عمل بررسی سرریز در کل پروژه

10- دستورات تکرار و حلقه ها
11- دستورات شرطی و عملگر های مقایسه ای

12- انواع پارامتر ها
13- سربارگذاری

14- آرایه ها
15- شمارش ها Enum

16- ساختارها
17- انواع null پذیر
18- عملگر ??


انواع داده و نوع نوشتاری آن
مشخصه ی جدید .net به کارگیری کدها در چند زبان است. برای اینکه بشه از پروژه ی خودمون توی بقیه ی زبان های .net استفاده کنیم، باید کدهامون مطابق CLS باشه. (CLS: Common Language Specification)
توجه: متغیر هایی که در C#.net بدون علامت تعریف شده باشند (uint/system.UInt16) این خصوصیت رو ندارند (همچنین sbyte /System.SByte که مقادیر -128 تا 127 رو می گیره)
معرفی متغیر ها و مقدار دهی آنها و ایجاد انواع داخلی به کمک کلمه کلیدی new
معرفی متغیر ها و مقدار دهی آنها به صورت های گوناگونی انجام می شوند:
کد:
Int myvar1 = 10 , myVar2=myvar1+1;
Int myvar3;
Myvar3=1;
Int myvar3= new int();
مقدار های پیشفرض
نوع bool: false
نوع عددی: صفر
نوع Char: کاراکتر خالی
نوع DateTime: 1/1/0001 12:00:00 AM
برای اشیا: مقدار null

تبدیل کردن رشته به مقدار ها
همه انواع زبان دارای متد Parse() برای تبدیل رشته به نوع مورد نظر هستنند. این متد یک رشته را دریافت کرده و مقداری از نوع فراخواننده اش باز می گرداند.
کد:
Bool b = bool.parse(“True”);
Int I = int.parse(“8”);
کاراکتر های گریز
مثل زبان های مشابه C، C# امکان استفاده از کاراکتر های گریز را، که نحوه ی چاپ کاراکتر ها در خروجی را مشخص می کنند، می دهد. هر کارامتر گریز با یک \ شروع می شود.
آپستروف:\’
کوتیشن:\”
بک اسلش:\\
صدای بیپ:\a
ساخت شر جدید و بردن نشانگر به سطر جدید:\n
نشان گر را به سطر فعلی باز می گرداند:\r
فاصله ی tab:\t
توجه: اگر می خواهید رشته ای را که نوشته اید به همان شیوه که نوشته شده است، نمایش داده شود، می توانید قبل از علامت @ استفاده کنید.
کد:
String myLongString = @”this is a very
           Very
                    Long string”;
Console.WriteLine(myLongString);
Console.WriteLine(@“He Said:“” Show String“””);
 
  • شروع کننده موضوع
  • #2

trustme

لنگر انداخته
ارسال‌ها
2,810
امتیاز
900
نام مرکز سمپاد
شهید بهشتی
شهر
کاشان
سال فارغ التحصیلی
1387
دانشگاه
دانشگاه خواجه نصیر طوسی
رشته دانشگاه
مهندسی مکانیک
پاسخ : مقدمات برنامه نویسی با C#

رشته ها و برابری آنها
برای مقایسه ی دو متغیر (یا شی) می تونین از عملگر های «==» و «!=» استفاده کنید.
عملگر «==» دو طرف خود را چک می کند؛ اگر یک مقدار و نشانگر یک محل از حافظه بودند، مقدار true را بر می گرداند وگرنه false می دهد.
عملگر «=!» (تعجب مساوی) برخلاف «==» کار می کند. در صورتی که مقدار دو طرف یکسان باشد مقدار false برمی گرداند. و اگر مقدار دو طرف مساوی باشه، مقدار true برمی گرداند.
در مقایسه ی دو رشته باید به خاطر داشته باشیم که تساوی دو رشته کاراکتر کاراکتر بررسی می شود. پس کوچک و بزرگ بودن حروف هم مهم است. یعنی Hello با HELLO مساوی نیست.

نوع System.Text.StringBuilder
نکته ی موجود در مورد اعضای این کلاس این است که زمانی که با آنها کار می کنید مستقیما داده های قبلی را تغییر می دهید به جای اینکه فضای دیگری با اطلاعات جدید دریافت کنید. می توانید توسط سازنده های این کلاس اشیایی با مقادیر اولیه مشخص ایجاد کنید، سپس مقادیر موجود در این اشیا را تغییر دهید. به کد های زیر و استفاده از این کلاس توجه کنید:
static void FunWithStringBuilder()
{
System.Text.StringBuilder Sb = new StringBuilder(“Default Value!”);
Sb.Append(“\n[new line is writing]”);
Sb.AppendLine(“And Line 2”);
Sb.Replace(“2”,”Again”);
Console.WriteLine(“Sb is s:O{0} Written”,Sb.ToString());
}
خروجی برنامه که توسط دستور Console.WriteLine انجام می شه چیزی به صورت زیر است:
Sb is s:O Default Value!
[new line is writing]
And Line Again Written

تبدیلات گسترش دهنده و محدود کننده
class Program
{
static void Main(string[] args)
{
Console.WriteLine(“**Fun With Type Conversion **”;
// Add two shorts and print the result
short numb1=9, numb2=10;
Console.WriteLine(“{0} + {1} = {2}”, numb1, numb2, Add(numb1,numb2));
Console.ReadLine();
}
static int Add(int x, int y)
{return x + y;}
}
توجه کنید که متد Add انتظار دارد دو عدد int برایش ارسال شود. اما متد Main دو متغیر از نوع short برای آنها ارسال می کند. با این حال برنامه بدون اشکال کار می کند و مقدار 19 را بر می گرداند.
چون در اینجا عدد short از int کوچکتر است عمل تبدیل نوع، از نوع کوچکتر به نوع بزرگتر که Widening نامیده می شود، انجام می گردد. عمل گسترش به صورت خود به خودی و بدون از دست دادن اطلاعات انجام می گیرد.
البته بعضی اوقات عمل گسترش به نوع بزرگتر باعث ایجاد خطای کامپایلری می شود. مثلا فرض کنید در دو متغیر numb1 و numb2 اعداد بزرگی باشد؛ اگر حاصل جمع آنها را به جای نمایش دادن در متغیر دیگری از نوع short ذخیره کنید چون به صورت ضمنی عمل گسترش نوع انجام می شود و حاصل به نوع int تبدیل می گردد خطای کامپایلری دریافت می کنیم:
static void Main(string[] args)
{
Console.WriteLine(“**Fun With Type Conversion **”;
// Add two shorts and print the result
short numb1=30000, numb2=30000;
short answer = Add(numb1,numb2 ); //Error!
Console.WriteLine(“{0} + {1} = {2}”, numb1, numb2, answer);
Console.ReadLine();
}
خطای کامپایلری نوشته است: نمی توانید نوع int را به نوع short تبدیل کنید.
به عمل تبدیل نوع بزرگتر به نوع کوچکتر، Narrowing یا محدود کننده می گیم. این عمل همیشه خطای کامپایلری ایجاد میکند و کاری به این نداره که عدد توی بازه ی مورد نظر از نوع کوچکتر هست یا نه !
اگر مطمن هستیم نوع مورد نظر ما از نوع کوچکتر بیشتر نمی شود می شود نوع بازگشتی را مشخص کنیم:
short answer = (short)Add(numb1, numb2);
اگر مقدار خروجی رو در چنین حالتی چک کنید، مقدار -5536 رو می بینید که تعجب برانگیزه! در ادامه دلیل این موضوع رو بحث می کنیم (;
 
  • شروع کننده موضوع
  • #3

trustme

لنگر انداخته
ارسال‌ها
2,810
امتیاز
900
نام مرکز سمپاد
شهید بهشتی
شهر
کاشان
سال فارغ التحصیلی
1387
دانشگاه
دانشگاه خواجه نصیر طوسی
رشته دانشگاه
مهندسی مکانیک
فعال سازی عمل بررسی سرریز در کل پروژه

یادتون میاد که در پست بالا به این رسیدیم که خروجی برنامه به شکل "30000 + 30000 = -5536" است !؟ به خاطر همین سرریز ها زبان C# کلمات کلیدی checked و unchecked را برای اطمینان از کشف همه ی داده های از دست رفته معرفی کرده است.
برای مدیریت سرریز و پاریز (overflow وunderflow ) در برنامه دو راه داریم:
1- به صورت دستی این موارد را کنترل کنیم
2- کامپایلر بررسی کند
زمانی که خطوط کد را داخل بلوک checked قرار می دهیم، کامپایلر C# مجبور می شود همه ی سرریزها و پاریزهای روی داده در این بلوک را شناسایی و نمایان کند.
اگر سرریزی داخل بلوک checked رخ دهد، خطای زمان اجرایی (System.OverflowException) بوجود می آید. {بعدا در مورد این نوع خطا و try..catch خواهیم گفت. فعلا توجه کنید چگونه استفاده کرده ایم (;}
static void ProcessByte()
{
byte b1=100, b2=250;
try
{
byte sum = checked( (byte)Add(b1, b2) );
Console.WriteLine(“sum = {0}”, sum);
}
catch(OverflowException ex)
{
Console.WriteLine(ex.Message);
}
}
اگر لازم باشد کلمه کلیدی checked را می شود روی مجموعه ای از دستورات اعمال کنید.
try
{
checked
{
byte sum = (byte)Add(b1, b2) ;
Console.WriteLine(“sum = {0}”, sum);
}
}
catch(OverflowException ex)
{
Console.WriteLine(ex.Message);
}
اگر شما برنامه ای ایجاد کنید و لازم باشد که همه سرریز ها در برنامه مشخص شوند باید تعداد زیادی از خطوط برنامه داخل بلوک checked قرار گیرد. اما راه حل بهتری هست. برای تنظیم خصوصیتی که همه عملیات بررسی وجود سرریز رو انجام می دهد، داخل محیط Visual Studio 2008 صفحه خصوصیات پروژه را باز کنید و قسمت مربوط به این موضوع رو تیک بزنید. (گزینه ی []Check for arithmetic overflow/underflow)
حالا فرض کنید خطوطی از کد دارید که اگر سرریز رخ داد اهمیت نداشته باشه یا خودتون خواسته باشین این اتفاق بیافته؛ حالا از کلمه ی کلیدی unchecked استفاده می کنیم.
استفاده از unchecked مثل checked هستش دیگه (;
کلاس System.Convert
این کلاس برای تبدیلات گسترش دهنده و محدود کننده هم استفاده می شود.
static void NarrowWithConvert()
{
byte myByte = 0;
int myInt = 200;
myByte = Convert.ToByte(myInt);
Console.WriteLine(“Value of myByte = {0}”, myByte);
}

شما می تونین از این کلاس استفاده کنید یا از تبدیل نوع صریح؛ هرجور دوست دارید!
 
  • شروع کننده موضوع
  • #4

trustme

لنگر انداخته
ارسال‌ها
2,810
امتیاز
900
نام مرکز سمپاد
شهید بهشتی
شهر
کاشان
سال فارغ التحصیلی
1387
دانشگاه
دانشگاه خواجه نصیر طوسی
رشته دانشگاه
مهندسی مکانیک
حلقه ها و عملگر ها در C#

دستورات تکرار یا حلقه
1- حلقه for
2- حلقه foreach/in
3- حلقه while
4- حلقه do/while

حلقه for
اگر قرار باشد بلوکی از کدها به تعداد مشخصی بار اجرا شوند حلقه for با قابلیت انعطاف خود می تواند این کار را انجام دهد.
// (variable; condition; verb(
for(i=0; i<4; i++)
{
}
for(i=0; i<4; i++)
//One line code!
این حلقه هیچ تفاوتی با حلقه for در زبان های C، C++ و Java ندارد.
* در این حلقه از دستورات goto، continue و break می توانید استفاده کنید.

حلقه foreach
این حلقه امکان بررسی عناصر داخل یک آرایه بدون تست کردن کران بالای آرایه را برای شما فراهم می کند.
string[] carType = { “Ford”, “BMW”, “Honda” }
foreach(string c in carType)
Console.WriteLine(c);
int[] myInts = {10, 20, 30, 40}
int I;
foreach(I in myInts)
Console.WriteLine(I);
علاوه بر آرایه ها این حلقه امکان پیمایش مجموعه های تعریف شده از سوی کاربر را نیز فراهم ساخته است.

حلقه while و do/while
حلقه while تا زمانی که مقدار true داشته باشد، انجام می شود.
حلقه do/while نیز مانند while عمل می کند؛ با این تفاوت که شرط را در انتهای حلقه بررسی می کند.
while(/Condition/)
{
}
do
{
}while(/Condition/);

عملگر مقایسه ای
== اگر دو عبارت باهم برابر باشند، مقدار true برمی گرداند.
!= اگر دو عبارت باهم برابر نباشد، مقدار true برمی گرداند.
< عملگر کوچکتری
> عملگر بزرگتری
<= عملگر کوچکتر مساوی
>= عملگر بزرگتر مساوی
* از اعداد به عنوان مقدار شرط نمی توانید استفاده کنید.
int con = 1;
if(con){} //No!
if(con=1){}//Yes!

عملگر های منطقی
&& ANDمنطقی if(myBool1 && (myInt=10))
|| ORمنطقی if(myBool1 || (myInt=10))
! NOTمنطقی if(! myBool)

دستور switch
این دستور هم مانند C، C++ و Java است. در این دستور با توجه به مقدار یک متغیر، یکی از راه ها پیش گرفته می شود.
* اگر caseی که اجرا می شود break نداشته باشد، case های بعدی نیز چک می شوند تا به break برسد. اما اگر break; وجود داشته باشد، از دستور switch خارج می شود.
Console.WriteLine(“1 [C#], 2[VB]”);
string str=Console.ReadLine();
int n=int.Parse(str);
switch(n)
{
case 1:
Console.WriteLine(“C# is fine language!”);
break;
case 2:
Console.WriteLine(“VB.net: OOP, MultiTheard, …!”);
break;
default:
Console.WriteLine(“ok!”);
break;
}
 

l-n@z

کاربر فوق‌فعال
ارسال‌ها
103
امتیاز
2
نام مرکز سمپاد
فرزانگان
شهر
مشهد
پاسخ : مقدمات برنامه نویسی با C#

thank u
 

s2h

کاربر نیمه‌فعال
ارسال‌ها
7
امتیاز
0
نام مرکز سمپاد
شهيد بهشتي
شهر
كاشان
پاسخ : مقدمات برنامه نویسی با C#

اگر ميشه غير از كنسول هم آموزش بديد
 

alireza70

کاربر جدید
ارسال‌ها
2
امتیاز
0
نام مرکز سمپاد
هاشمی نژاد
شهر
مشهد
دانشگاه
سیستان و بلوچستان
رشته دانشگاه
کامپیوتر سخت افزار
پاسخ : مقدمات برنامه نویسی با C#

کسی هم اگر سوال داشت میتونه رو من حساب کنه...:))
 

NOOB

کاربر فوق‌فعال
ارسال‌ها
93
امتیاز
21
نام مرکز سمپاد
راهنمایی شهید هاشمی نژاد 1 مشهد
شهر
مشهد
مدال المپیاد
المپیاد کشوری زبان ++C
پاسخ : مقدمات برنامه نویسی با C#

ممنون
+
 

fograd

کاربر حرفه‌ای
ارسال‌ها
348
امتیاز
12
نام مرکز سمپاد
شهيد بهشتي بابل
شهر
بابل
دانشگاه
اگه خدا بخواد تهران
پاسخ : مقدمات برنامه نویسی با C#

سلام یه سوال داشتم :
دارم برنامه تبدیل تاریخ شمسی رو به میلادی می نویسم از 3 تا الگوریتم استفاده کردم هیچکدوم جواب درستی ندادن.
چون معمولا بچه ها درد همدیگه رو میفهمن اینجا سوال کردم...
لطفا تو الگوریتمش یکم کمک کنید.
مشکلم سر سال کبیثه ست
مرسی (;
 

fograd

کاربر حرفه‌ای
ارسال‌ها
348
امتیاز
12
نام مرکز سمپاد
شهيد بهشتي بابل
شهر
بابل
دانشگاه
اگه خدا بخواد تهران
پاسخ : مقدمات برنامه نویسی با C#

مرسی
معلومه کسی بلد نیست... :D
 

mohsenadc

کاربر نیمه‌فعال
ارسال‌ها
17
امتیاز
1
نام مرکز سمپاد
شهید قدوسی
شهر
قم
مدال المپیاد
13 دوره تلای جهانی دارم! اوه اوه سقف ترک خرد
پاسخ : مقدمات برنامه نویسی با C#

بیا بیش خودم عزیز دل!!! (<

من یه کامپننت دارم شمسی به میلادی ، میلادی به شمسی از وسط به دو طرف تبدیل میکنه P:>

التماس کن برات میفرستم :))
 

fograd

کاربر حرفه‌ای
ارسال‌ها
348
امتیاز
12
نام مرکز سمپاد
شهيد بهشتي بابل
شهر
بابل
دانشگاه
اگه خدا بخواد تهران
پاسخ : مقدمات برنامه نویسی با C#

التماس میکنم! بفرست
 

sir erfan

کاربر فعال
ارسال‌ها
27
امتیاز
4
نام مرکز سمپاد
allame helli
شهر
hamedan
مدال المپیاد
sherkat dar olampiyad camputer va rotbe aval dar ostan
دانشگاه
sharif
رشته دانشگاه
electronic
پاسخ : مقدمات برنامه نویسی با C#

سلام من عرفانم 16 ساله 3 ساله برنامه مينويسم يا c++ هر كس سوال داشت در خدمتم




×لطفاً فينگليش تايپ نكنيد.
 

mehran

کاربر فوق‌حرفه‌ای
ارسال‌ها
732
امتیاز
1,087
نام مرکز سمپاد
شهید بهشتی
شهر
نیشابور
دانشگاه
صنعتی شریف
رشته دانشگاه
علوم کامپیوتر
پاسخ : مقدمات برنامه نویسی با C#

توی همین #C 2008 یه سوال داشتم.
با چه تابعی می‌شه یه رشته رو از یک موقعیت دلخواه برید و ریخت توی رشته‌ی دیگه؟
منظورم از موقعیت دلخواه اینه که مثلا از کاراکتر شماره ۶ به اونور بریده شن برن تو یه رشته دیگه، یا ۶ به قبل.
سوال بعدی پیدا کردن مکان کاراکتر توی رشته است. یعنی می‌خوام بفهمم مثلا کاراکتر 'm' چندمین کاراکتر رشتمه.
خیلی ممنون می‌شم اگه کسی جواب بده! :D
 

iraj201

کاربر فعال
ارسال‌ها
52
امتیاز
28
نام مرکز سمپاد
شهید بهشتی
شهر
میاندوآب
دانشگاه
ایشالله تبریز
رشته دانشگاه
شاید آی تی
پاسخ : مقدمات برنامه نویسی با C#

به نقل از sir erfan :
سلام من عرفانم 16 ساله 3 ساله برنامه مينويسم يا c++ هر كس سوال داشت در خدمتم




×لطفاً فينگليش تايپ نكنيد.
c++ بهتره یا c# ؟ کارایی کدوم بیشتره؟
 

sutech

کاربر نیمه‌حرفه‌ای
ارسال‌ها
171
امتیاز
67
نام مرکز سمپاد
شهید بهشتی
شهر
بابل
سال فارغ التحصیلی
88
مدال المپیاد
فیزیک
دانشگاه
sutech-iust
رشته دانشگاه
برق-کنترل-مهندسی پزشکی(علوم اعصاب)
پاسخ : مقدمات برنامه نویسی با C#

با تشکر از ایجاد این تاپیک یه پیشنهاد داشتم!

لطفا توابع apiو مخلفاتش رو با C# بیان کنید . من اینقدر تو برنامه نویسی با این متغیر ها و انواع و حلقه ها و ... برخورد کردم دیگه داره حالم . . .
فکر کنید پاسکال/دلفی/VB
C++/c#
همشونو فقط در همین حد بلدم!
ممنون
 

666_yahud

کاربر نیمه‌حرفه‌ای
ارسال‌ها
193
امتیاز
133
نام مرکز سمپاد
شهید بهشتی
شهر
سبزوار
دانشگاه
علمو...کدوم علمو کدوم صنعت
رشته دانشگاه
صنایع
پاسخ : مقدمات برنامه نویسی با C#

سلام
ببخشید که میتونه برنامه بنویسه بم بده از خجالتش در میام حالا
1.نوشتن برنامه ای که ک مم و ب م م دو عددو حساب کنه
2 جایگشتهای 3 عددو بنویسه
 

daneshvar.amrollahi

کاربر حرفه‌ای
ارسال‌ها
327
امتیاز
130
نام مرکز سمپاد
راهنمایی حلی۲/دبیرستان حلی۱۰/دبیرستان علامه طباطبایی
شهر
تهران
سال فارغ التحصیلی
1397
مدال المپیاد
کامپیوتر
پاسخ : مقدمات برنامه نویسی با C#

تفاوت سی شارپ و سی پلاس پلاس در چیه؟ برای من که با زبان پاسکال آشنایی نسبتاً بالایی دارم و با زبان سی را در محیط کدویژن برنامه نوشته ام، شروع سی شارپ بهتره یا سی پلاس پلاس؟ اصلاً تفاوت این دو زبان در چیست؟
 

mehrad :|

کاربر نیمه‌حرفه‌ای
ارسال‌ها
193
امتیاز
698
نام مرکز سمپاد
حلی ۲ / سلام ایران‌زمین / انرژی
شهر
تِران
پاسخ : مقدمات برنامه نویسی با C#

به نقل از Daneshvar :
تفاوت سی شارپ و سی پلاس پلاس در چیه؟ برای من که با زبان پاسکال آشنایی نسبتاً بالایی دارم و با زبان سی را در محیط کدویژن برنامه نوشته ام، شروع سی شارپ بهتره یا سی پلاس پلاس؟ اصلاً تفاوت این دو زبان در چیست؟
شما C# رو توی ویندوز تحت تکنولوژی .NET میزنی و بیشتر Windows Form Application یا Web Form Application میزنی و برنامه های تحت وب یا ویندوز مینویسی
ولی c++ بیشتر جنبه تقویت کد زنی داره (برای المپیاد کامپیوتر و acm)
اگه میخوای المپیاد کامپیوتر بخونی تو دبیرستان بهتره c++ یاد بگیری
البته اگه c++ بلد نباشی c# کار کردن خیلی سخت میشه برات
 

rezaezio

کاربر فوق‌حرفه‌ای
ارسال‌ها
1,167
امتیاز
1,956
نام مرکز سمپاد
حلّیِ 2
شهر
تهران
مدال المپیاد
برنز و طلای کامپیوتر !
دانشگاه
شریف
رشته دانشگاه
نرم افزار
پاسخ : مقدمات برنامه نویسی با C#

به نقل از Daneshvar :
تفاوت سی شارپ و سی پلاس پلاس در چیه؟ برای من که با زبان پاسکال آشنایی نسبتاً بالایی دارم و با زبان سی را در محیط کدویژن برنامه نوشته ام، شروع سی شارپ بهتره یا سی پلاس پلاس؟ اصلاً تفاوت این دو زبان در چیست؟
همون طور که دوستمون گفتن ، واسه اینکه بتونی با سی شارپ کار کنی سی پلاس پلاس رو احتیاج داری !!
پس شما تو هر شرایطی که هستی باید سی پلاس پلاس رو اول یاد بگیری .

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