![]() |
|
|||||||
| ثبت نام | کتابخانه فایل ها | راهنما | لیست کاربران | کلوب های کاربران | همه قسمت ها ، به عنوان خوانده شده علامت گذاری شوند |
| مقالات مرتبط با Microsoft .Net Framewrok مقالات مرتبط با Microsoft .Net Framework از جمله مقالات مرتبط با ASP.NET ، C#.NET ، VB.NET و ... در این بخش قرار میگیرند. |
![]() |
|
|
ابزار های تاپیک | طریقه نمایش |
|
|
#1 |
|
کاربر دائمی
![]() تاریخ عضویت: آذر 1386
محل زندگی: Tehran
پست: 165
تشکرها: 5
1,425 بار تشکر شده در 95 پست
|
سلام بر همه
به طور حتم تمامی مطالبی که من در این سری پست خواهم نوشت به صورت پراکنده در این انجمن و در وب سایت های دیگر وجود دارد. اما برای کسانی که سی شارپ را تازه شروع کرده اند و یا هنوز شروع نکرده اند و یا برای کسانی که بنا به دلایلی مجبور شده اند که از زبان سی شارپ استفاده کنند ولی هنوز به مفاهیم اصلی آن مسلط نیستند پیشنهاد می کنم که گوشه ای از وقت خودشان را به خواندن این مجموعه پست ها اختصاص دهند و گریزی بر روی دانش خود از دنیای برنامه نویسی شیء گرا و استفاده از آن دانش در دنیای سی شارپ داشته باشد. در این مجموعه شاید حدود 25 پست در مورد اصول برنامه نویسی OOP در سی شارپ و سپس Application Foundation در سی شارپ را بررسی خواهیم کرد. تمامی این پست ها صرفا جنبه آموزشی دارند و در محیط Console Application خواهند بود. لطفا سوالات مرتبط با موضوع را در این پست و مابقی سوالات را در سایر قسمت های انجمن مطرح نمایید و در صورتیکه مطلبی را پست می کنید حتما گزینه نمایش امضاء را بر دارید تا فقط مطالب در پست قرار گیرند. در ضمن می تونین این مطالب رو توی وبلاگ خودم به آدرس زیر هم پیدا کنین: http://csharptuning.blogfa.com |
|
|
|
| 51 کاربر از Masoud_TB به خاطر این مطلب مفید تشکر کرده اند: | abolfazlab, alifatehi, aliondvd, alireza_ap, amir3321, amironline, armintabiz, babak9hosseini, bsng110, Cold.82, eAmin, elardekani, farnooshhp, farzad_, FiACKER, graphmax, hobab1987, HosseinJoon, Kaykha, khafan_bat, mah.yar, mahdi1369, MEHRADIS, miladpc, mina63, mohi_ka2, Nice Ro$e, NobodyNobody, obalitjoOon, ostovarit, RED-C0DE, reza mohajer, Safa2, safiech, sahasoft, sarnev6t, savalan_sahand, Seyed.tabatabaii, shahabm58, sinpin, skflower, SMRAH1, Sociant7, Successful, مهرایزد, مجتبی زارعی, محمد خانی, XScream, [عبدالله], سایه 27, علیرضا مداح |
|
|
#2 |
|
کاربر دائمی
![]() تاریخ عضویت: آذر 1386
محل زندگی: Tehran
پست: 165
تشکرها: 5
1,425 بار تشکر شده در 95 پست
|
سي شارپ در سال 2001 توسط شركت مايكروسافت به همراه بسته دات نت براي اولين بار مطرح و ارائه شد. كه بعد ها به عنوان يك زبان برنامه نويسي استاندارد توسط ECMA و ISO مورد تائيد قرار گرفت.
زبان برنامه نويسي سي شارپ توسط تيمي به مديريت اندرز هايلزبرگ كه قبلا تجربه ارائه زبان هاي برنامه نويسي موفقي همچون توربو پاسكال و دلفي رو داشت ايجاد شد. هايلزبرگ سي شارپ را يك زبان برنامه نويسي شي گراء كه از زبان هاي برنامه نويسي بزرگ (همچون دلفي , جاوا و اسمال تاك) تاثير پذيري داشته معرفي مي كنه. Syntax زبان سي شارپ شبيه به ++C مي باشد و البته تفاوت هاي بسياري هم داره. حالا قبل از اينكه بخواهم بيشتر در مورد سي شارپ توضيح بدم بايد يه توضيحاتي هم در مورد دات نت و امكاناتش بگم. دات نت فريم ورك (NET Framework) يه بسته نرم افزاري شامل راه حل بسياري از نيازهاي توسعه نرم افزاري (Base Class Library) و همچنين امكان توسعه و اجراي برنامه هاي توليد شده براي اين فريم ورك مي باشد. برنامه هاي توليد شده براي دات نت فريم ورك توسط Common Language Runtime اجراء مي شوند. CLR يا همان Common Language Runtime سرويس هايي مهمي از قبيل Garbage Collection , Memory Managment و Exception Handling رو ارائه مي دهد. Garbage Collection: در زبان برنامه نويسي سي شارپ ديگر نگراني از جهت مديريت اشياء در حافظه وجود ندارد به اين معني كه وقتي شما شيء ايجاد مي كنيد بعد از اينكه ديگر از آن شي ء استفاده نكرديد آن شيء به طور اتوماتيك از حافظه پاك خواهد شد. اين كار توسط GC يا همان Garbage Collector انجام مي شود. روش كار GC به اين ترتيب است كه تا موقعي كه Referenceي به يك object وجود داشته باشد آن شيء در حافظه باقي خواهد ماند اما در صورتيكه Referenceي به آن شيء وجود نداشته باشد بعد از يك بازه زماني نامشخص آن شيء به صورت اتوماتيك از حافظه پاك خواهد شد. در مورد نحوه عملكردش بعدا بيشتر توضيح ميدم. يه نكته ديگري كه بايد بهش اشاره كنم اينه كه برخلاف زبان هاي برنامه نويسي ديگر وقتي كد شما در زبان برنامه نويسي سي شارپ (يا هريك از زبان هاي ديگر دات نت) كامپايل مي شود به يك زبان ديگري به نام Intermediate Language يا همان IL تبديل مي شود. و در موقعي كه درخواست براي اجراء آن داده مي شود توسط يك مكانيزمي به نام Just In Time Compiler كه در CLR موجود است به زبان خاص آن ماشين تبديل شده و اجراء مي گردد. ![]() ادامه دارد ... |
|
|
|
| 34 کاربر از Masoud_TB به خاطر این مطلب مفید تشکر کرده اند: | .:KeihanCPU:., abolfazlab, alifatehi, aliondvd, amironline, ariyanna, asaei.ehsan, babak9hosseini, bsng110, eAmin, farzad_, ganbarih, H®ssein, hobab1987, karbar987654321, khafan_bat, m..r..h, Maleki82, man7tomani, mcse2007, mehdi_darabi, miladpc, mohi_ka2, r12784, Safa2, savalan_sahand, shahabm58, shayan_j, Sociant7, مهرایزد, winer3549, XScream, z.znia, علیرضا مداح |
|
|
#3 |
|
کاربر دائمی
![]() تاریخ عضویت: آذر 1386
محل زندگی: Tehran
پست: 165
تشکرها: 5
1,425 بار تشکر شده در 95 پست
|
حالا مي خوام در مورد سي شارپ كمي بيشتر صحبت كنيم. سي شارپ يك زبان شيء گراست به اين معني كه هرآنچه كه در سي شارپ وجود دارد در غالب دو مفهوم كلاس (Class) و شيء (Object) و روابط بين آنها خلاصه مي شود.
كلاس(Class): در واقع يك ايده (Concept) يا ذهنيت مي باشد. مثلا يك نجار چه ذهنيتي نصبت به يك "ميز" دارد؟ خوب مسلما يه صفحه , چهار پايه و .... اين ذهنيتي است كه يك نجار نسبت به "ميز" دارد. اين دقيقا مفهوم كلاس است. يعني تا موقعي كه آن ميز ساخته نشه فقط يك ذهنيت يا در واقع كلاس است. شيء (Object): اشياء موجوديت هايي هستند كه از كلاس ها (ذهنيت) ساخته مي شوند. باز براي مثال همان نجار وقتي ذهنيتش رو به واقعيت تبديل مي كنه در واقع يك ميز مي سازه يا يك Object (شيء) ايجاد كرده است. حالا اگر يكم دقت كنيم مي بينيم كه توي دنياي واقعي هم همينطوره. مفهوم انسان يك كلاس است و وقتي يك نفر متولد مي شود يك شيء از آن كلاس داريم. باز وقتي بيشتر دقت مي كنيم مي بينيم كه همه كلاس ها (ذهنيت ها) مي تونن يكسري مشخصات داشته باشند. مثلا انسان. مسلما هر انساني اسم داره , سن داره , رنگ مو , رنگ پوست و ... اين اطلاعات state يا خصوصيات هر فرد هستند. و البته هر انساني يكسري توانمندي داره يعني مي تونه يكسري كار انجام بده. مثلا راه بره , حرف بزنه , گوش كنه , بنويسه , .... اين ها رفتار ها يا behavior هر فرد هستند. حالا سوالي كه پيش مياد اينه كه آيا ميشه دو نفر با خصوصيات مشترك و رفتار مشترك رو يكي دونست؟ علي احمدي 33 ساله - علي احمدي 33 ساله؟ آيا به نظر شما اين دو يك نفر هستند!؟! خير. پس هميشه يك چيز وجود داره كه ما ميتونيم دو نفر رو از هم تميز بديم: ما به اون مي گيم Identity (وسيله شناسايي). براي اين دو مي تونه شماره شناسنامشون باشه يا كد ملي يا ... حالا به نظر شما براي كامپيوتر دو موجود كه داراي اطلاعات و رفتار هاي كاملا مشترك هستند چطور از هم تشخيص داده مي شوند؟ جواب محل قرار گيريشان در حافظه است. ادامه دارد... |
|
|
|
| 26 کاربر از Masoud_TB به خاطر این مطلب مفید تشکر کرده اند: |
|
|
#4 |
|
کاربر دائمی
![]() تاریخ عضویت: آذر 1386
محل زندگی: Tehran
پست: 165
تشکرها: 5
1,425 بار تشکر شده در 95 پست
|
كلاس هاي پايه دات نت - dot Net Base Class Library
بعد از اينكه مفهوم كلاس و شيء رو متوجه شديم. براي اطلاعتون بايد بگم كه دات نت فريم ورك حدود 2500 كلاس داره كه قبلا براي شما نوشته شده و شما بدون اينكه احتياجي به نوشتنشون داشته باشين خيلي راحت مي تونين از اين 2500 كلاس موجود استفاده كنين. Namespace چيست؟ اگر يك مقدار فكر كنيم مي بينيم كه پيدا كردن يك كلاس بين 2500 كلاس پايه و احتمالا كلاس هايي كه خودتون نام گذاري شون مي كنين كار سختي خواهد بود! Namespace ها در حقيقت اين امكان رو بشما مي دهند كه بتوانيد كلاس هاي خودتون رو دسته بندي كنين و هر كلاس رو داخل دسته مورد نظر خودشون قرار بدين. به عنوان مثال ما كلاسي داريم به نام SqlConnection و همينطور كلاس ديگري به نام SqlDataAdapter و .... براي همين يك Namespace به نام System.Data.SqlClient ايجاد شده كه كلاس هايي كه مربوط به System و كار با داده ها (Data) و در نهايت مختص Sql Server هستند رو داخل اين namespace قرار مي دهيم. توي اين تصوير تعدادي از namespace هاي عمومي دات نت نمايش داده شده اند. ![]() اين نكته رو هم بياد داشته باشين كه اسم كامل يك كلاس شامل اسم به همراه نام namespace آن است: System.Data.SqlClient.SqlConnection اسم كامل ( Qualified Name) كلاس SqlConnection مي باشد. using اما اگر قرار باشد براي استفاده از يك كلاس هميشه اسم كاملش رو بنويسيم كار ما خيلي سخت مي شود. براي همين شما ميتوانيد با يكبار نوشتن اسم Namespace آن كلاس (يا كلاس هايي كه مي خواهيد استفاده كنين) با استفاده از يك keyword به نام using از تكرار آن جلوگيري كنين. به عنوان مثال من در يك مثال مي خواهم ده ها بار از كلاس Console و دستوراتش استفاده كنم. براي همين بالاي كدم يك بار using System; رو ذكر مي كنم تا از نوشتن كلمه System براي دفعات مكرر جلوگيري كنم: کد:
using System; |
|
|
|
| 30 کاربر از Masoud_TB به خاطر این مطلب مفید تشکر کرده اند: | .:KeihanCPU:., abolfazlab, alifatehi, amironline, ariyanna, asaei.ehsan, babak9hosseini, bsng110, eAmin, hana2064, H®ssein, hobab1987, karbar987654321, khafan_bat, Maleki82, mcse2007, mehdi_darabi, meisam_mohamadi_kh, miladpc, mohi_ka2, pooya_3p, r12784, Safa2, savalan_sahand, shahabm58, shayan_j, Sociant7, مهرایزد, winer3549, XScream |
|
|
#5 |
|
کاربر دائمی
![]() تاریخ عضویت: آذر 1386
محل زندگی: Tehran
پست: 165
تشکرها: 5
1,425 بار تشکر شده در 95 پست
|
اجازه بدين كمي از دنياي تئوري خارج شيم و كمي هم كد بنويسيم. اما قبل اينكه وارد كد نويسي بشيم بايد با محيطي كه قراره توش كد بنويسيم رو بشناسيم.
برنامه نويسان سي شارپ دات نت معمولا از Visual Studio .NET براي توليد كد استفاده مي كنند. هرچند كه در اين مورد شما هيچ محدوديتي ندارين و مي تونين از هر ابزاري حتي Notepad براي توليد كد استفاده كنين. Visual Studio .NET 2005 نسخه 8 Visual Studio شركت مايكروسافت كه خيلي راحت مي تونين از بازار تهيه كنين و خوشبختانه (يا شايد هم متاسفانه) دو سه هزار تومان بيشتر قيمت نداره. البته به دليل قيمتي زيادي كه در بيرون از ايران داره مايكروسافت يك نسخه مجاني به نام Visual Studio 2005 Express Edition رو هم ارائه مي كنه كه مي تونين از لينك زير دانلودش كنين. Visual Studio 2005 Express Edition ! من توي توضيحاتم از نسخه Professional استفاده خواهم كرد. بعد از اينكه مراحل نصب تمام شد. از منوي Start --> All Programm --> Microsoft Visual Studio 2005 روي Microsoft Visual Studio 2005 كليك كنين تا پنجره مقابل براتون باز بشه. اين صفحه Start Page مي باشد. اگر دقت كنين سمت چپ بالا دو تا گزينه Open و Create كه امكان ايجاد يا باز كردن پروژه يا وب سايت رو به شما مي دهد دارين. روي گزينه Create Project كليك كنين(مي تونين اين كار رو با استفاده از كليد هاي Shift + Ctrl + N هم انجام بدين. بهتون پيشنهاد مي كنم براي سريع تر شدن كارتون Shortcut ها رو ياد بگيرين. در پنجره مقابل روي گزينه Visual CSharp كليك كنين تا انواع پروژه هايي كه مي شه با زبان سي شارپ توليد كرد رو بينين. در ابتدا دوره ما با پيروي از اصول مايكروسافت مثال هايمان در محيط Console Application كه يك محيطي شبيه با DOS و بدون طراحي UI مي باشد شروع خواهيم كرد. در ادامه وارد Windows و ... مي شويم. در قسمت پائين صفحه داخل قسمت Name نام پروژه خود رو بنويسين و در قسمت Location مسير پروژه خود رو مشخص كنين و در نهايت اسم Solution رو وارد نمائيد. به صورت پيش فرض اسم Solution همان اسم پروژه شماست. دقت كنين كه در دات نت براي هر پروژه يك Folder ايجاد خواهد شد. البته در صورتيكه شما گزينه Create directory for solution رو هم تيك بزنين يك Folder هم براي Solution ايجاد خواهد شد. Solution چيست؟ Solution يا به معناي فارسي راه حل بالاترین سطح دسته بندي در محيط ويژوال استوديو دات نت است. يك Solution مي تواند يك يا چند پروژه و هم اين طور فايل را در كنار هم دسته بندي نمايد.اصولا وظيفه Solution نگهداري اطلاعات روابط بين پروژه هاست كه يك فايل با پسوند sln مي باشد. و داراي تاثير در خروجي پروژه نخواهد بود. در ادامه دوره بيشتر در اين مورد توضيح خواهم داد. در مقابل Project يا همان پروژه ها داراي خروجي مستقيم با توجه به نوعشان هستند. به عنوان مثال Console Application ها داراي خروجي با پسوند exe به معناي executable يا همان فايل هاي قابل اجراء مي باشند. ! در دات نت ما به خروجي هر پروژه فارغ از اينكه چه نوع فايلي است (exe يا dll) اسمبلي - Assembly مي گويم. بعد از اينكه كليد OK رو زديد پروژه شما ايجاد مي شود و براي شما يك فايل به نام Programm.cs رو باز مي نمايد. اين فايل به صورت پيش فرض محلي است كه نرم افزار شما از داخل آن شروع خواهد شد. حالا فقط براي اينكه شروع كرده باشيم داخل اين فايل و مطابق شكل زير شروع به تايپ كردن نمائيد: کد:
Console.WriteLine("Hello World - C# Tuning!");
![]() ![]() دوست گرامی R.Kiani زحمت کشیدند و یک راهنمای نصب کامل برای Visual Studio .NET تهیه کردند می تونین از این لینک دانلودش کنین. http://www.esnips.com/doc/dc493672-7...tallationGuide ادامه دارد ... آخرین ویرایش به وسیله Masoud_TB : یک شنبه 19 خرداد 1387 در 10:28 صبح |
|
|
|
| 25 کاربر از Masoud_TB به خاطر این مطلب مفید تشکر کرده اند: |
|
|
#6 |
|
کاربر دائمی
![]() تاریخ عضویت: آذر 1386
محل زندگی: Tehran
پست: 165
تشکرها: 5
1,425 بار تشکر شده در 95 پست
|
اجازه بدين ابتدا كدي كه قبلا نوشتيم رو بررسي كنيم.
کد:
Console.WriteLine("Hello World - C# Tuning");
پس اگر شما هر چيز ديگري داخل پرانتز و بين " " قرار دهيد همان را براي شما چاپ خواهد كرد. Method چيست؟ در واقع Method ها همان رفتار هايي هستند كه ما از كلاس ها انتظار داريم. در مثال بالا نوشتن بر روي تصوير رو مي توانيم با استفاده از متد WriteLine بر روي كلاس Console استفاده كنيم. ايجاد متغيير ها در سي شارپ - Variables in CSharp براي ايجاد يك متغيير در سي شارپ بايد ابتدا نوع داده اي آن و سپس نام متغيير را وارد نمائيم و در انتها ; را تايپ كنيم: کد:
int MyNumber = 1000; Console.WriteLine(MyNumber); نوع هاي داده اي در سي شارپ - C# DataTypes نوع هاي داده اي رو مي توان بسته به محل قرار گيريشان در حافظه به سه دسته تقسيم كرد:
اگرحافظه رو به دو قسمت Stack و Heap تقسيم كنيم. مقادير تمامي متغيير هاي نوع اول در حافظه Stack قرار مي گيرد و به همين جهت داراي رفتارهاي خاصي مي شود كه بيشتر توضيح خواهم داد. مقادير متغيير هاي نوع دوم در حافظه Heap قرار مي گيرند. در مورد Poiter Type ها صحبت نخواهيم كرد. Value Types: همان طور كه گفتيم مهمترين خاصيت اين نوع متغيير ها قرارگيري مقادير آن ها در حافظه Stack مي باشد كه به همين دليل رفتارهاي خاصي خواهند داشت. اين نوع متغيير ها شامل : Primitive Types يا همان نوع هاي بدوي - Enum ها و Struct ها مي باشند. Numeric Types , Boolean , Char نوع هايي هستند كه به آن ها Primitive Types مي گوييم. نوع هاي عددي شامل : int , double , decimal , long , short , byte و ... كه مقادير مختلفي از اعداد رو داخل خوشان نگه مي دارند. Boolean ها متغيير هايي هستند كه فقط مقدار True و False به معني مثبت يا منفي رو داخل خوشان نگه مي دارند. و در نهايت Char ها همان كاراكتر ها هستند. کد:
bool married = false; int myNumber = 1000; char c = 'c'; ادامه دارد... |
|
|
|
| 22 کاربر از Masoud_TB به خاطر این مطلب مفید تشکر کرده اند: |
|
|
#7 |
|
کاربر دائمی
![]() تاریخ عضویت: آذر 1386
محل زندگی: Tehran
پست: 165
تشکرها: 5
1,425 بار تشکر شده در 95 پست
|
گفتيم كه ValueType ها داراي رفتار خاصي هستند. اما چه رفتاري؟
وقتی یک متغییر از یکی از نوع های Value Type مثل int ایجاد می کنیم مقدار آن داخل حافظه Stack قرار می گیرد و وقتی از آن متغییر یک کپی میگیریم مقدار متغییر قبلی داخل متغییر جدید کپی می شود. یعنی اگر مقدار متغییر دوم رو عوض کنیم تاثیری روی مقدار متغییر اول نخواهد گذاشت. این رفتار در مورد تمامی ValueType ها صدق می نماید: ![]() ![]() Enumerations فرض بفرمائيد كه شما مي خواهيد يك كلاس تعريف كنيد به نام انسان. وقتي خواص انسان رو تحت بررسي دارين به جنسيت مي رسيد. حالا مي خواهيم روي كلاس انسان يك متغيير براي نشان دادن جنسيت تعريف كنيم. به نظر شما جنسيت رو از چه نوعي بايد در نظر گرفت؟ bool يا int؟ اگر bool در نظر گرفتيم false به معني مرد خواهد بود يا true؟ اگر int در نظر گرفتيم چه عددي بيانگر مرد و چه عددي بيانگر زن مي باشد؟ و اگر كاربر شما عددي به غير اعداد انتخابي شما وارد كرد, چه طور؟ گاهي اوقات در توسعه نرم افزار ها ما به جنس (Type)هايي نياز داريم كه بتوانيم مقدار شان را محدود كنيم. مثلا همين جنسيت. با استفاده از Enumeration ها مي توانيم مقدار متغيير جنسيت رو به مرد يا زن محدود كنيم. براي ايجاد يك Enumeration بايد در يك فايل با پسوند cs كه بيانگر سي شارپ است از Syntax زير استفاده كنيم: کد:
public enum eSex
{
Male,
Female
}
کد:
eSex Sex; // ايجاد متغيير از جنس يك enum Sex = eSex.Male; // مقدار دهي متغيير ادامه دارد... آخرین ویرایش به وسیله Masoud_TB : جمعه 17 خرداد 1387 در 13:09 عصر |
|
|
|
| 24 کاربر از Masoud_TB به خاطر این مطلب مفید تشکر کرده اند: |
|
|
#8 |
|
کاربر دائمی
![]() تاریخ عضویت: آذر 1386
محل زندگی: Tehran
پست: 165
تشکرها: 5
1,425 بار تشکر شده در 95 پست
|
اجازه بدين تا مقداري موضوع بحث رو از Value Type ها به يك Reference تايپ تغيير بديم.
كلاس ها - Classes قبل از اين تعريف كلاس رو با هم بررسي كرديم. اما حالا چطور مي توان يك كلاس توليد كرد. فرض بفرمائيد مفهومي مثل انسان رو مي خواهيم در غالب يك كلاس تعريف كنيم. ابتدا يك پروژه جديد از نوع Console Application با يك نام دلخواه در مسير دلخواه تان ايجاد كنين. سپس يك فايل با نام Prgoramm.cs خواهيد داشت كه در مثال قبلي ديده بوديم. حالا بايد يك كلاس جديد به پروژه اضافه كنيم. براي اين كار بايد از منوي View گزينه Solution Explorer رو انتخاب كنيم يا مي توانيم از كليد هاي Alt + Ctrl + L استفاده نمائيم. Solution Explorer در واقع يك نمايش مبنتي بر فايل از پروژه يا Solution شماست كه به صورت يك درخت واره (TreeView) مي باشد. راس آن Solution شماست و سپس پروژه و Properties و Reference و در نهايت كلاس ها و آيتم هاي ديگر پروژه شماست. روي Project يعني دومين آيتم از اين درخت واره راست كليك كرده و گزينه Add و بعد New Item رو كليك مي نمائيم. در پنجره اي كه باز مي شود يك Class را انتخاب و در قسمت پايين اسم فايل رو مشخص مي نمائيم. دقت كنين كه پسوند فايل هاي سي شارپ cs مي باشد. (براي اين مثال نام Person رو تايپ نمائيد.) ! نكته اي كه لازمه در نامگذاري فايل ها متدها و ... رعايت كنين اين است كه نام گذاري كلاس ها بهتر است به ترتيبي باشد كه حرف اول هر كلمه با حروف بزرگ (Upper Case) و ما بقي با حروف كوچك باشد. به عنوان مثال كلاس Person كه P با حروف بزرگ و ما بقي كوچك مي باشد. يا كلاس SqlConnection حروف اول هر كلمه يعني S و C با Upper case نوشته مي شوند. وقتي اسم رو تايپ كردين و گزينه Add رو زديد. سپس يك فايل به Solution Explorer اضافه خواهد شد و همزمان براي شما نمايش داده مي شود. متن داخل فايل به اين ترتيب است: کد:
using System;
using System.Collections.Generic;
using System.Text;
namespace CSharpTuning.Samples
{
class Person
{
}
}
ايجاد كلاس در سي شارپ براي ايجاد يك كلاس در سي شارپ شما بايد داخل يك namespace از كلمه كليدي class و سپس نام كلاس استفاده كنين. مثال با براي ايجاد كلاس Person داخل namespaceي به نام CSharptuning.Samples جمله فوق يعني class Person رو به همراه يك block از كد براي اين كلاس ايجاد مي كنيم. دقت كنين كه شما تا به اينجا دو علامت } و دو علامت { ديده ايد يعني شما دو block از كد داريد كه يكي براي namespace و ديگري براي كلاس Person مي باشد. هر آنچه كه داخل {} علامت مربوط به كلاس Person قرار گيرد متعلق به كلاس Person است. فيلد ها - Fileds در سي شارپ تا ايجاي كار كلاس ما هنوز هيچ عضوي ندارد اما ما مي توانيم از اين كلاس استفاده كنيم. حالا بايد داخل اين كلاس اطلاعات مورد نظرمان را تعريف كنيم. من مي خواهم Field هاي Name و Age رو براي اين كلاس تعريف كنم. به اين معنا كه هر انسان (Person) داراي نام و سن مي باشد. براي تعريف يك Field با داخل block كلاس مورد نظر ابتدا كلمه public و سپس نوع داده اي و سپس نام متغيير را وارد نمائيم. پس من داخل block كلاس Person اين دو جمله را تايپ مي نمايم. کد:
public string Name; public int Age; پس تا اينجا كلاس ما بايد به اين شكل باشد: ادامه دارد... |
|
|
|
| 21 کاربر از Masoud_TB به خاطر این مطلب مفید تشکر کرده اند: |
|
|
#9 |
|
کاربر دائمی
![]() تاریخ عضویت: آذر 1386
محل زندگی: Tehran
پست: 165
تشکرها: 5
1,425 بار تشکر شده در 95 پست
|
بعد از اينكه يك كلاس رو ايجاد كرديم بايد بتوانيم از آن كلاس استفاده كنيم. اصولا براي استفاده از يك كلاس مي توانيم از آن كلاس يك شيء بسازيم و سپس به آن شيء اطللاعات ست كنيم و از رفتار هاي آن كلاس استفاده كنيم. همانطور كه قبلا هم گفتم حافظه رو مي توان به دو قسمت Stack و Heap تقسيم كرد. براي ساختن يك شيء (object) بايد ابتدا يك متغيير از جنس كلاس مورد نظر ايجاد كنيم:
کد:
Person p; کد:
p = new Person(); خطوط بالا رو مي توان در يك خط خلاصه كرد و همان موقع كه يك reference مي سازيم همان موقع هم با يك object جديد مقدار دهي نمائيم: کد:
Person p = new Person(); p.Name = "Ali"; p.Age = 20; دقت داشته باشين كه وقتي شما از كلمه new و سپس اسم كلاس با استفاده از پرانتز استفاده مي كنين, در واقع يك شيء جديد در حافظه ساخته مي شود و اگر اين شيء رو به يك متغيير مثل p كه قبلا ساخته شده بود مقدار دهي كنين يك رابطه جديد و در نتيجه مقاديرتان را از دست خواهيد داد: کد:
Person x = new Person(); x.Name = "Reza"; x.Age = 44; x = new Person(); Console.WriteLine(x.Age); // خروجي اين خط صفر خواهد بود x.Name = "Ali"; دقت نمائيد كه objectي كه مقادير Reza و 44 را داشته است توسط Garbage Collection به دلايلي كه قبلا هم توضيح داديم از حافظه حذف خواهد شد. حالا با توجه به مثال هايي كه صحبت شد به نظر شما خروجي خطوط زير چه خواهد بود؟ کد:
Person myPerson = new Person(); myPerson.Name = "Masoud"; myPerson.Age = 33; Person yourPerson = myPerson; yourPerson.Name = "Amir"; yourPerson.Age = 23; کد:
ادامه دارد.... |
|
|
|
| 27 کاربر از Masoud_TB به خاطر این مطلب مفید تشکر کرده اند: | .:KeihanCPU:., abolfazlab, alifatehi, amir3321, amironline, babak9hosseini, bsng110, davood114, elahe akbarypoor, farasou68, farshadnassiri, farzinsh, ganbarih, hasti.s, hobab1987, karbar987654321, Maleki82, mehdi_darabi, miladpc, r12784, Safa2, Sociant7, مهرایزد, winer3549, XScream, آریوس1985, علیرضا مداح |
|
|
#10 |
|
کاربر دائمی
![]() تاریخ عضویت: آذر 1386
محل زندگی: Tehran
پست: 165
تشکرها: 5
1,425 بار تشکر شده در 95 پست
|
Reference كپي در سي شارپ
اجازه بدين كمي بيشتر در مورد اين خط كد توضيح بديم: کد:
Person yourPerson = myPerson; Place Holders کد:
Person p = new Person();
p.Name = "Ali";
p.Age = 20;
Console.WriteLine("MyName is {0} and I 'm {1} years old.",p.Name,p.Age);
کد HTML:
MyName is Ali and I 'm 20 years old. همانطور كه در ابتداي صحبتمان در مورد كلاس ها صحبت كرديم در واقع رفتار هاي كلاس ها (يا همان اشياء شان) از طريق متد ها پياده سازي مي گردد. به اين معني كه اگر كلاس Person توانمندي چاپ اطلاعاتش را نياز داشته باشد بايد يك متد براي اين كار ايجاد كند. براي ايجاد يك متد در سي شارپ كافي است از Syntax زير استفاده كنيم: کد:
AccessModifier returnType MethodName([parameter type parameter name])
{
}
در صورتيكه متد شما بايد مقدار برگرداند (شبيه function ها در vb) بايد جنس متغيير خروجي را مشخص كنيم. مثلا اگر متد شما دو عدد رو با هم جمع مي زند و يك حاصل رو در غالب يك عدد بر مي گرداند نوع آن را int تعريف مي كنيم. اگر متد شما خروجي ندارد و فقط يك سري كار را انجام مي دهد (subroutine ها در vb) نوع خروجي آن را void تعريف مي كنيم. MethodName كه اسم متد مورد نظر شماست. در صورتيكه متد شما داراي ورودي (parameter) است كافيه كه به ترتيب نوع داده اي پارامتر و سپس نام آن را تايپ مي كنيم. اگر تعداد پارامتر ها بيش از يكي است از , براي جدا كردن آن ها استفاده مي كنيم. دقت كنين كه هر متد داراي يك block of code براي خودش مي باشد. پس حتما {} رو قرار مي دهيم و كد هايي كه نياز داريم را ما بين اين دو علامت مي نويسيم. ! محل قرار گيري متد ها در block of code كلاس هاست. حالا به متد ShowInfo كه براي نمايش اطلاعات اشخاص در داخل كلاس Person مي نويسم دقت كنين: کد:
public void ShowInfo()
{
Console.WriteLine("Name: {0},Age: {1}",Name,Age);
}
کد:
Person p = new Person(); p.Name = "ali"; p.age = 20; p.ShowInfo(); کد:
publc class Calc
{
public int Add(int num1,int num2)
{
return num1 + num2;
}
}
کد:
Calc c= new Calc();
int result = c.Add(10,50);
Console.WriteLine("Result of {0} + {1} is: {2}",10,50,result);
ادامه دارد.... |
|
|
|
| 25 کاربر از Masoud_TB به خاطر این مطلب مفید تشکر کرده اند: |
![]() |
| بوک مارک کردن این تاپیک |
| کاربرانی که این تاپیک را مشاهده میکنند: 1 (0 کاربران و 1 مهمان) | |
| ابزار های تاپیک | |
| طریقه نمایش | |
|
|