صفحه 2 از 2 نخستنخست 12
نمایش نتایج: از شماره 11 تا 15 , از مجموع 15

موضوع: آموزش سي شارپ

  1. #11
    »»»---(¯*¤پری سایت¤*¯)--»
    تاریخ عضویت
    Sep 2010
    محل سکونت
    ı̴̴̡̡̡ ̡͌l̡̡̡ ̡͌l̡ ̴̡ı̴̴̡|̲̲̲͡͡͡ ̲▫̲͡ ̲̲̲͡͡π̲̲͡͡ ̲̲͡▫
    نوشته ها
    1,056
    تشکر تشکر کرده 
    209
    تشکر تشکر شده 
    680
    تشکر شده در
    248 پست
    قدرت امتیاز دهی
    87
    Array

    پیش فرض

    icon1

    خوب البته صحبت ما در مورد Structure ها هنوز تمام نشده اما اجازه بدين ادامه مطلب رو بعد از اينكه كلاس ها رو بيشتر بررسي كرديم داشته باشيم.

    نوع هاي در سي شارپ - Reference Type in CSharp
    مهم ترين نوع داده اي Reference Type در سي شارپ همان Class يا كلاس ها مي باشند كه تا حدودي در موردشان صحبت كرديم. اما يك نوع داده اي ديگر به نام object وجود دارد كه بايد در موردش صحبت كنيم.

    اصولا object خود نيز يك كلاس است اما به جهت اهميتي كه دارد من آن را به صورت جدا از بقيه كلاس ها بررسي مي نمايم. همانطور كه قبلا هم گفتم سي شارپ يك زبان Object Oreinted يا همان شيء گراست و تمامي مفاهيم شيء گرايي در اين زبان رعايت مي شود. يكي از مهمترين مفاهيم شيء گرايي مفهوم Inheritance يا همان توارث مي باشد. توارث در حقيقت به معني به ارث رفتن خصوصيات يك موجود از موجود ديگر مي باشد. و نكته اي كه Inheritance رو به object ربط مي دهد اين است كه object به عنوان base class تمامي كلاس هاي موجود در دات نت فريم ورك مي باشد. به اين معني كه تمامي كلاس هايي كه در دات نت فريم ورك و كلاس هايي كه شما مي نويسيد, همه و همه از كلاس object به ارث رفته اند.

    وقتي يك كلاس از يك كلاس ديگر به ارث مي رود تمامي خصوصيات عمومي آن نيز به آن كلاس به ارث مي رود. مثلا اگر من كلاسي به نام Person داشته باشم كه داراي اطلاعات Name و Age و متد Print باشد وقتي كه كلاس Student را از كلاس Person به ارث مي برم خصوصيات عمومي كلاس Person در كلاس Student نيز قابل استفاده مي باشد.

    به مثال زير دقت كنيد:



    کد:
    public class Test{}
    با توجه به كدي كه بالا نوشته شده است در اين كلاس هيج موجودي (اعم از Field يا Method و يا ...) وجود ندارد اما اگر از اين كلاس يك شيء بسازيم متوجه مي شويم كه در اين كلاس يك سري متد وجود دارد:


    personclass

    نكته قابل تامل اينجاست كه اين چهار متد (ToString(), GetHashCode(), GetType(),Equal) همگي در تمام كلاس هايي كه در دات نت يافت مي شود وجود دارد. پس مي توان نتيجه گرفت كه اين متد ها از كلاس object به همه كلاس ها به ارث مي رسند.
    بنــــــــــــد نمی آید دوست داشتنت !
    مثل آنکه شاهــــــــــرگ
    احســـــــــــــاسام را بریده باشی !

    141
    142
    85214085768964716462



  2. #12
    »»»---(¯*¤پری سایت¤*¯)--»
    تاریخ عضویت
    Sep 2010
    محل سکونت
    ı̴̴̡̡̡ ̡͌l̡̡̡ ̡͌l̡ ̴̡ı̴̴̡|̲̲̲͡͡͡ ̲▫̲͡ ̲̲̲͡͡π̲̲͡͡ ̲̲͡▫
    نوشته ها
    1,056
    تشکر تشکر کرده 
    209
    تشکر تشکر شده 
    680
    تشکر شده در
    248 پست
    قدرت امتیاز دهی
    87
    Array

    پیش فرض

    icon1

    رشته ها در سي شارپ - String in CSharp
    نوع داده اي رشته اي نيز يكي از مهم ترين نوع هاي داده ايست كه در اين گروه قرار مي گيرد(Reference Types). براي ايجاد يك متغيير از نوع داده اي رشته اي مي توانيم از نمونه كد زير استفاده كنيم:
    کد:
    string myName = "Ali";
    همانطور كه در كد بالا مشاهده مي كنيد براي مقدار دهي يك متغيير از نوع داده اي رشته اي كافيست مقدار مورد نظرمان را داخل دو علامت "" قرار داده و با استفاده از = مقدار دهي را انجام دهيم.



    کد:
    myName += "Reza";
    با توجه به كد بالا مقدار myName با استفاده از operation += كه در حقيقت مقدار قبلي را + مقدار جديد كرده و مقدار دهي مي نمايد از Ali به AliReza تغيير يافت. البته شما مي توانستيد اين كد را به صورت زير نيست بنويسيد:



    کد:
    myName = myName + "Reza";
    البته دليل ذكر مثال با روش استفاده از =+ نيست بلكه مي خواهم در مورد رفتار كلاس string كمي توضيح دهم.

    در حقيقت كلاس string يك كلاس از نوع Reference Type هاست اما به دليل استفاده بسيار زيادش در زبان هاي برنامه نويسي مايكروسافت روش استفاده از آن را با استفاده keyword ي با همان نام و با حروف كوچك يعني string آسانتر و به روش value type ها نموده است. به عبارت ديگر وقتي شما مي نويسيد:



    کد:
    string myName = "ali";
    در واقع كامپايلر يك شيء از نوع string در حافظه Heap براي شما ايجاد مي كند:


    String CSharp

    و وقتي مقدار قبلي را با مقدار جديد "Reza" جمع مي كنين يك شيء كاملا جديد در حافظه ايجاد مي شود. و شيء قبلي توسط Garbage Colletion از حافظه پاك خواهد شد.


    String CSharp2


    با توجه به نكته بالا اگر در شرايطي نياز داشتيد تا يك متن را مرتبا تغيير دهيد بهترين روش استفاده از string ها نخواهد بود. چرا كه هر چه تعداد دفعات تغيير متن شما بيشتر باشد به همان ميزان تعداد object هاي ساخته شده در حافظه Heap نيز زياد خواهد شد (البته كه Garbage Collection آن ها را حذف خواهد كرد) اما بهتر از كلاس ديگري به نام StringBuilder براي اين موضوع استفاده شود. تا به بهترين نحو از حافظه سيستم استفاده كنيم. كلاس StringBuilder در namespace System.Text قرار گرفته است و براي استفاده از آن بايد يك شيء از آن بسازيم:



    کد:
    StringBuilder st = new StringBuilder();
    و بعد مي توانيم با استفاده از متد Append متن مورد نظرمان را به آن اضافه كنيم:



    کد:
    st.Append("Ali");st.Append("Reza");
    و در نهايت با استفاده از متد ()ToString نتيجه را در غالب يك String در اختيار بگيريم:



    کد:
    string Name = st.ToString();
    رفتار StringBuilder برخلاف رفتار String مي باشد و به اين ترتيب خواهد بود كه در ابتدا مثلا 16 بايت حافظه براي خودش در نظر خواهد گرفت. وقتي نصف اين 16 بايت پر شده (با استفاده از دستور Append - يعني 8 بايت) آنوقت خودش به صورت اتوماتيك يك شيء جديد خ با دو برابر اندازه فعلي در حافظه خواهد ساخت (يعني 32 بايت) سپس مقادير قبلي را داخل اين شيء جديد كپي مي گيرد. و باز وقتي نصف اين 32 بايت پر شد به همين ترتيب عمل خواهد كرد. نتيجتا به صورت تساعدي اين مقدار حافظه بيشتر مي شود و در نتيجه تعداد اشيايي كه در حافظه ساخته مي شوند كمتر و كمتر خواهد بود و در نتيجه سرعت عملكرد آن به مراتب سريعتر خواهد بود.

    متد ()ToString
    ! دقت داشته باشين كه متد ToString از كلاس object به تمامي كلاس هاي دات نت به ارث مي رسد. در نتيجه ميتوانيد از اين متد هر جا كه به شكل رشته اي يك شيء نياز داشتين استفاده كنين:



    کد:
    int i = 12;int j = 32;string myResult = (i * j).ToString();
    البته دقت كنين كه هميشه اون چيزي انتظار دارين رو به شما بر نخواهد گرداند:به عنوان مثال وقتي از شيء اي از كلاس Person را ToString كنيم (يا هر كلاسي كه شما ايجاد كرده باشيد) به صورت پيشفرض خروجي ToString آن اسم كامل (Qualified Name) آن خواهد بود:



    کد:
    Person p = new Person();p.Name = "Ali";p.Age = 20;Console.WriteLine(p.ToString());
    يعني اگر كلاس Person من در اين مثال داخل namespaceي به نام ConsoleApplication12 باشد خروجي اين مثال ConsoleApplication12.Person خواهد بود.
    بنــــــــــــد نمی آید دوست داشتنت !
    مثل آنکه شاهــــــــــرگ
    احســـــــــــــاسام را بریده باشی !

    141
    142
    85214085768964716462



  3. #13
    »»»---(¯*¤پری سایت¤*¯)--»
    تاریخ عضویت
    Sep 2010
    محل سکونت
    ı̴̴̡̡̡ ̡͌l̡̡̡ ̡͌l̡ ̴̡ı̴̴̡|̲̲̲͡͡͡ ̲▫̲͡ ̲̲̲͡͡π̲̲͡͡ ̲̲͡▫
    نوشته ها
    1,056
    تشکر تشکر کرده 
    209
    تشکر تشکر شده 
    680
    تشکر شده در
    248 پست
    قدرت امتیاز دهی
    87
    Array

    پیش فرض

    icon1

    آرايه ها در سي شارپ - Arrays in CSharp
    مسلما به مانند بيشتر زبان هاي برنامه نويسي استفاده از آرايه ها در سي شارپ نيز مرسوم است. استفاده از آرايه ها براي نگهداري چندين مقدار از يك نوع داده اي استفاده مي شود.

    آرايه ها را مي توان از يك ديدگاه به سه دسته تقسيم كرد:
    1. آرايه هاي تك بعدي - Simple Arrays
    2. آرايه هاي مستطيلي - Rectangular Arrays
    3. آرايه هاي نامنتظم - Jagged Arrays

    براي تعريف يك آرايه تك بعدي در سي شارپ مي توانيد از Syntax زير استفاده كنين:

    [code]

    numbers = new int[3];
    numbers[0] = 100;
    numbers[1] =400;
    numbers[2] = 500;
    [code]

    همانطور كه مي بينين در كد بالا من يك آرايه از اعداد ايجاد كردم كه داراي سه خانه مي باشد. براي دسترسي به هر كدام از خانه هاي اين آرايه بعد از نام متغييرم از [] استفاده مي كنم و بين اين دو علامت از يك عدد (indexer) كه از صفر تا n مي باشد. دقت كنين كه هميشه n يكي كمتر از طول آرايه شماست.
    البته به غير از كدي كه بالا نوشته شده است من مي توانم از هر يك از روش هاي زير نيز براي ايجاد آرايه هاي استفاده كنم:



    کد:
    int[] numbers = new int[]{100,400,500};
    در روش بالا بدون ذكر طول آرايه با مقدار دهي مستقيم آن به وسيله مقاديري كه بين دو علامت {} قرار مي گيرند طول آن را مشخص مي نمائيم.
    اين هم يك نمونه ديگر از ايجاد آرايه ها:



    کد:
    int numbers = {100,400,500};
    نكته قابل تامل در مورد آرايه ها اين است كه اين نوع هاي داده اي در دسته Reference Type ها قرار مي گيرند و اصولا مقادير آن ها در حافظه Heap نگهداري مي شود:


    Arrays20in20CSharp
    حالا اگر من يك آرايه از يك كلاس مثلا Person داشته باشم به نظر شما شكل حافظه اين آرايه من چگونه خواهد بود؟ به كد زير دقت كنين و سعي كنين كه شكل حافظه آن را رسم نمائيد:



    کد:
    Person[] personList = new Person[3];
    دقت كنين كه حتما تمامي خانه هاي اين آرايه من بايد قبل از اينكه مورد استفاده بگيرند مقدار دهي شوند:



    کد:
    personList[0] = new Person("Ali",24);personList[1] = new Person("Reza",35);personList[2] = new Person("John",44);
    كه در نتيجه خطوط با شكل حافظه ما به اين ترتيب خواهد بود:

    Arrays20in20CSharp20Ref

    نكته بسيار مهم ديگر اين است كه ساختار آرايه ها به نحوي است كه طول آن ها ثابت مي باشد و در صورتيكه شما بخواهيد طول آن را تغيير دهيد مثلا از 3 خانه به 5 خانه ارتقاء دهيد بايد يكبار ديگر آن را new كنيد و در نتيجه اين new كردن شما اطلاعات قبلي خود را از دست خواهيد داد.



    کد:
    personList = new Person[5];
    و نتيجه كد بالا اين شكل خواهد شد:
    Arrays20in20CSharp20Ref20New

    پس دقت داشته باشيد كه در صورتيكه مي خواهيد طول يك آرايه را بيشتر كنين حتما ابتدا يك آرايه جديد ساخته و طول آن را بيشتر در نظر بگيريد و سپس مقادير آرايه قبلي را در آرايه جديد كپي كنين.

    ساختار foreach در سي شارپ
    شما مي توانيد با استفاده از ساختار foreach در سي شارپ اطلاعات موجود در آرايه هاي خود را خوانده و از آن ها استفاده كنين. در حقيقت foreach يك نوع حلقه است كه بر روي آرايه ها شما انجام مي شود و تعداد دفعات انجام آن برابر است با طول حلقه شما و در هر با حركت يكي از خانه هاي آرايه شما را در اختيارتان قرار مي دهد. از Syntax زير براي ايجاد حلقه foreach استفاده مي نمائيم:



    کد:
    int[] myNums = new int[4];myNums[0] = 10;myNums[1] = 320;myNums[2] = 150;myNums[3] = 510;
    و براي نمايش اطلاعات داخل اين آرايه:



    کد:
    foreach(int num in myNums)Console.WriteLine(num);

    !
    دقت داشته باشين كه در ساختار foreach شما اجازه تغيير آرايه خود را به هر نحوي نداريد و اگر اين عمل را انجام دهيد به runtime error برخورد خواهيد كرد.

    آرايه هاي مستطيلي در سي شارپ - Rectangular Arrays in CSharp
    براي ايجاد يك آرايه مستطيلي از Syntax زير استفاده كنين:



    کد:
    int[,] myMatrix = new int[10,10];
    با توجه به كد بالا شما داراي يك ماتريكس 10 در 10 هستيد و براي استفاده از هر خانه از اين آرايه به index هاي x , y آن احتياج دارين:



    کد:
    myMatrix[0,0] = 0;myMatrix[0,1] = 100;
    و ....

    آرايه هاي نامنتظم - Jagged Arrays
    اين آرايه ها را مي توان با استفاده از كد زير توليد كرد:



    کد:
    int[][] jaggedArray = new int[3][];
    دقت داشته باشين كه در خط اول فقط طول يك بعد از آرايه را مشخص كرديم ==> 3



    کد:
    jaggedArray[0] = new int[3];jaggedArray[1] = new int[2];jaggedArray[2] = new int[4];
    و در نتيجه اين خطوط شما يك آرايه به مانند تصوير زير خواهيد داشت:

    Jagged20Arrays20In20Csharp

    استفاده از ArrayList در سي شارپ - ArrayList in Csharp
    به خاطر ساختار آرايه ها در سي شارپ وقتي شما نياز به آرايه اي دارين كه طول آن نا مشخص است مي توانين از يك كلاس به نام ArrayList كه در namespaceي به نام System.Collection قرار دارد استفاده كنين.



    کد:
    ArrayList arList = new ArrayList();arList.Add(10);arList.Add(20);arList.A dd(40);foreach(int i in arList)Console.WriteLine(i);
    ساختار ArrayList به نحوي است كه با شروع استفاده از آن يك طول مشخصي (مثلا 4) را براي خود اختصاص مي دهد. سپس وقتي شما 2 تا از اين خانه ها را با استفاده از متد Add پر كنين , طول آرايه داخلي خود را به دو برابر افزايش مي دهد و مقادير قبلي را داخل آرايه جديدش كپي ميكند و اين عمل را به صورت تصاعدي ادامه مي دهد كه در نتيجه اين عمل هم سرعت و كارايي خوبي دارد و هم طولش قابل تغيير است
    بنــــــــــــد نمی آید دوست داشتنت !
    مثل آنکه شاهــــــــــرگ
    احســـــــــــــاسام را بریده باشی !

    141
    142
    85214085768964716462



  4. #14
    »»»---(¯*¤پری سایت¤*¯)--»
    تاریخ عضویت
    Sep 2010
    محل سکونت
    ı̴̴̡̡̡ ̡͌l̡̡̡ ̡͌l̡ ̴̡ı̴̴̡|̲̲̲͡͡͡ ̲▫̲͡ ̲̲̲͡͡π̲̲͡͡ ̲̲͡▫
    نوشته ها
    1,056
    تشکر تشکر کرده 
    209
    تشکر تشکر شده 
    680
    تشکر شده در
    248 پست
    قدرت امتیاز دهی
    87
    Array

    پیش فرض

    icon1

    در سي شارپ
    از يك ديدگاه مي توان متغيير ها را در سي شارپ به دو دسته تقسيم كرد:

    1. Class Variable
    2. Instance Variable
    تا اينجا ما چند تا مثال از نوع دوم داشتين. متغيير هايي كه بايد از طريق اشياءشان دسترسي داشت:




    کد:
    Person p = new Person();p.Name = "Ali";p.Age = 20;
    همانطور كه مي بينين براي دسترسي به Name و Age بايد حتما از كلاس Person يك شيء بسازيم و از طريق شيء به متغيير ها دسترسي داشته باشيم.


    اما فرض بفرمائيد كه روي مفهومي مثل انسان (همان كلاس Person) مي خواهيم "جمعيت" رو پياده كنيم. به نظر شما من مي تونم رو اين فرد ("Ali") مفهوم جمعيت رو پياده كنم؟ آيا اصلا اين منطقي است؟ مثل بگويم علي چند نفر است؟

    به نظر مي رسد كه تعريف مفهوم (متغيير) جمعيت يا تعداد روي يك فرد غير منطقي باشد و اصولا جمعيت مربوط به كل انسان هاست نه فقط يك نفر!


    براي همين ما بايد از نوع اول متغيير ها استفاده كنيم كه به آنها Class Variable مي گوييم براي ايجاد يك Class Variable بايد از كلمه Static در تعريف متغييرمان استفاده كنيم:




    کد:
    public class Person{public static int Count;public string Name;public int Age;}
    حالا اگر بخواهم جمعيت رو مقدار دهي كنم يا اينكه مقدار جمعيت رو بخوانم بايد ابتدا نام كلاس و سپس نام متغييرم رو بنويسم:




    کد:
    Person.Count = 1000;
    حالا همين شرايط رو براي متد ها نيز در نظر داشته بگيريد. فرض كنين كه من مي خواهم متدي داشته باشم كه جمعيت را برايم چاپ كند. آيا در تعريف اين متد بايد كلمه static به كار گرفته شود؟ مسلما بله! چون من مي خواهم رفتاري را نشان دهم كه مربوط به كل Concept ما يا همان كلاس ماست نه مربوط به يك شيء خاص. براي همين متد PrintCount رو به صورت زير تعريف مي كنم:



    کد:
    public static void PrintCount(){Console.WriteLine("Count:{0}",Count); }
    ! فراموش نكنيد كه شما در متد هاي Static مجاز به استفاده از متغيير هاي غير static نمي باشيد.
    وقتي مي خواهيم از يك متد Static استفاده كنيم كافيست كه اسم متد رو بعد از اسم كلاس بياوريم:



    کد:
    Person.PrintCount();
    حالا با توجه به پست هايي كه تا امروز داشتيم, مي تونين 2 تا از متد هاي Staticي كه استفاده كرديم رو نام ببرين؟


    كلاس هاي Static

    مفهوم كلمه Static بر روي تعريف كلاس ها به اين معني است كه وقتي شما يك كلاس Static دارين تمامي Memberهاي اين كلاس بايد به صورت static تعريف شوند و اينكه شما نمي توانيد از اين كلاس objectبسازيد و البته اصولا احتياجي به اين كار هم ندارين.
    بنــــــــــــد نمی آید دوست داشتنت !
    مثل آنکه شاهــــــــــرگ
    احســـــــــــــاسام را بریده باشی !

    141
    142
    85214085768964716462



  5. #15
    عضو سایت
    تاریخ عضویت
    Sep 2010
    محل سکونت
    GNU/Linux
    نوشته ها
    43
    تشکر تشکر کرده 
    30
    تشکر تشکر شده 
    116
    تشکر شده در
    37 پست
    قدرت امتیاز دهی
    25
    Array

    پیش فرض

    بهتر نیست که یه بخش به اسم .Net به انجمن اضافه کنیم.

صفحه 2 از 2 نخستنخست 12

برچسب ها برای این تاپیک

علاقه مندی ها (بوک مارک ها)

علاقه مندی ها (بوک مارک ها)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست در پست خود ضمیمه کنید
  • شما نمیتوانید پست های خود را ویرایش کنید
  •  

http://www.worldup.ir/