استفاده از Method Group Conversion
از نسخهی ۲، یک ویژگی به سیشارپ اضافه شد که بهشکل قابل توجهی اختصاصدهی method به delegate را ساده میکرد. این ویژگی method group conversion نام دارد و به شما اجازه میدهد تا به سادگی، نام یک متد را به delegate اختصاص دهید بدون اینکه نیاز داشته باشید از کلمهی کلیدی new استفاده کنید یا constructor مربوط به delegate را فراخوانی کنید.
به مثال زیر دقت کنید:
using System; class Program { delegate string UppercaseDelegate(string input); static string UppercaseFirst(string input) { char[] buffer = input.ToCharArray(); buffer[0] = char.ToUpper(buffer[0]); return new string(buffer); } static string UppercaseLast(string input) { char[] buffer = input.ToCharArray(); buffer[buffer.Length - 1] = char.ToUpper(buffer[buffer.Length - 1]); return new string(buffer); } static string UppercaseAll(string input) { return input.ToUpper(); } static void WriteOutput(string input, UppercaseDelegate del) { Console.WriteLine("Your string before: {0}", input); Console.WriteLine("Your string after: {0}", del(input)); } static void Main() { // using method group conversion WriteOutput("perls", UppercaseFirst); WriteOutput("perls", UppercaseLast); WriteOutput("perls", UppercaseAll); } } /* Output Your string before: perls Your string after: Perls Your string before: perls Your string after: perlS Your string before: perls Your string after: PERLS */
این مثال را در قسمت قبل نیز مشاهده کردید با این تفاوت که در این مثال از ویژگی Method group conversion استفاده شده است.
دقت کنید که در مثالهای قبل، از متدهای static استفاده میکردید. در مثال بعد مشاهده میکنید که می توانید از متدهای یک شیء استفاده کنید که static نیستند (instance methods).
using System; delegate string StrMod(string str); class StringOps { // Replaces spaces with hyphens. public string ReplaceSpaces(string s) { Console.WriteLine("Replacing spaces with hyphens."); return s.Replace(' ', '-'); } } class DelegateTest { static void Main() { StringOps so = new StringOps(); // create an instance of StringOps // Initialize a delegate. StrMod strOp = so.ReplaceSpaces; string str; // Call methods through delegates. str = strOp("This is a test."); Console.WriteLine("Resulting string: " + str); } }
همانطور مشاهده میکنید، ابتدا از روی کلاس مربوطه یک شیء ساخته و سپس از طریق آن شیء، متد را صدا زدهایم. دقت کنید که در مثال بالا نیز از method group conversion استفاده شده است.
متدهای بینام (Anonymous Methods)
یک anonymous method راهی برای ساختن یک بلوک کد بدون نام است که به یک delegate instance اختصاص مییابد. به مثال زیر توجه کنید:
using System; delegate void CountIt(); class AnonMethDemo { static void Main() { CountIt count = delegate { for (int i = 0; i <= 5; i++) Console.WriteLine(i); }; // notice the semicolon count(); } } /* Output 0 1 2 3 4 5 */
در این برنامه ابتدا یک delegate type به اسم CountIt تعریف کردهایم. درون متد اصلی، یک instance از این delegate تعریف کرده و آن را با یک بلوک کد مساوی قرار دادهایم که قبل از آن بلوک، کلمهی کلیدی delegate را میبینید. این بلوک کد، anonymous method است که بعد از فراخوانی count، اجرا میشود. به semicolon انتهای بلوک نیز توجه داشته باشید.
به مثال بعد توجه کنید:
using System; // Notice that CountIt now has a parameter. delegate void CountIt(int end); class AnonMethDemo2 { static void Main() { // Here, the ending value for the count // is passed to the anonymous method. CountIt count = delegate(int end) { for (int i = 0; i <= end; i++) Console.WriteLine(i); }; count(3); Console.WriteLine(); count(5); } } /* Output 0 1 2 3 0 1 2 3 4 5 */
همانطور که میبینید، CountIt در مثال بالا شامل یک integer argument است. پارامتر نیز بعد از کلمهی کلیدی delegate مشخص شده است.
سیشارپ دو نوع از anonymous function را تعریف میکند که عبارتند از anonymous method و lamba expression. تا اینجا با anonymous method آشنا شدید. در ادامه با lamba expression آشنا خواهید شد.
Lambda Expression
Lambda expression راهی دیگر برای ساخت anonymous function است. از اینرو، lambda expression میتواند به delegate اختصاص داده شود. بهدلیل اینکه lambda expression راحتتر از anonymous method معادل است، پیشنهاد میشود که تقریبا در همهی موارد از lambda expression استفاده شود.
تمامی lambda expression ها از lambda operator استفاده میکنند که عبارت است از: <=
این operator یک lambda را به دو قسمت تقسیم میکند. در سمت چپ، پارامترهای ورودی و در سمت راست، بدنهی lambda مشخص میشود.
به مثال زیر توجه کنید:
using System; delegate int Incr(int v); delegate bool IsEven(int v); class SimpleLambdaDemo { static void Main() { // A lambda expression that increases its parameter by 2. Incr incr = count => count + 2; Console.WriteLine("Use incr lambda expression: "); int x = -10; while (x <= 0) { Console.Write(x + " "); x = incr(x); // increase x by 2 } Console.WriteLine("\n"); // a lambda expression that returns true if its parameter // is even and false otherwise. IsEven isEven = n => n % 2 == 0; Console.WriteLine("Use isEven lambda expression: "); for (int i = 1; i <= 10; i++) if (isEven(i)) Console.WriteLine(i + " is even."); } } /* Output se incr lambda expression: -10 -8 -6 -4 -2 0 Use isEven lambda expression: 2 is even. 4 is even. 6 is even. 8 is even. 10 is even. */
در برنامهی بالا به این عبارات دقت کنید:
Incr incr = count => count + 2; IsEven isEven = n => n % 2 == 0;
عبارت اول به incr یک lambda expression را اختصاص میدهد که مقدار فرستاده شده به count را با ۲ جمع کرده و نتیجه را return میکند. این عبارت میتواند به Incr delegate اختصاص یابد زیرا با تعریف Incr تطابق دارد. در عبارت دوم، اگر حاصل lambda یک عدد زوج باشد، مقدار true و اگر حاصل عددی فرد باشد، مقدار false را return خواهیم کرد.
به مثال زیر توجه کنید:
using System; delegate int IntOp(int end); class StatementLambdaDemo { static void Main() { IntOp fact = n => { int r = 1; for (int i = 1; i <= n; i++) r = i * r; return r; }; Console.WriteLine("The factorial of 3 is " + fact(3)); Console.WriteLine("The factorial of 5 is " + fact(5)); } } /* Output The factorial of 3 is 6 The factorial of 5 is 120 */
تفاوت مثال بالا با مثال قبل، این است که در این مثال، lambda شامل بدنه است.
Events
Event یکی دیگر از ویژگیهای مهم سیشارپ است که بر اساس delegate میباشد. یک object میتواند برای یک event تعدادی event handler را register کند و هنگامیکه یک event اتفاق میافتد، تمامی handler های register شده، فراخوانی میشوند. Event handler ها باید مطابق با delegate باشند.
Event ها اعضای کلاس هستند و توسط کلمهی کلیدی event تعریف میشوند. فرم آن به شکل زیر است:
event event-delegate event-name;
در اینجا، event-delegate نام آن delegate است که این event را support میکند و event-name نام همین event object است که تعریف کردهایم.
به مثال زیر توجه کنید:
using System; delegate void MyEventHandler(); class MyEvent { public event MyEventHandler SomeEvent; public void OnSomeEvent() { if (SomeEvent != null) SomeEvent(); } } class EventDemo { static void Handler() { Console.WriteLine("Event Occurred!"); } static void Main() { MyEvent evt = new MyEvent(); evt.SomeEvent += Handler; evt.OnSomeEvent(); } } /* Output Event Occurred! */
این برنامه با تعریف delegate type برای event handler شروع میشود:
delegate void MyEventHandler();
تمام event ها از طریق delegate فعال میشوند. از اینرو، event delegate type، نوع بازگشتی و signature را برای event مشخص میکند.
سپس، کلاس MyEvent تعریف شده که درون آن، یک event به نام SomeEvent تعریف شده است:
public event MyEventHandler SomeEvent;
همچنین، درون کلاس MyEvent یک متد به نام ()OnSomeEvent وجود دارد که برای fire کردن event استفاده میشود. یعنی این همان متدی است که وقتی event اتفاق میافتد، فراخوانی میشود. این متد، event handler را از طریق SomeEvent delegate فراخوانی میکند:
if (SomeEvent != null) SomeEvent();
دقت کنید که handler درصورتی فراخوانی میشود که SomeEvent برابر با null نباشد. درون کلاس EventDemo یک متد به اسم ()Handler وجود داردکه درون متد ()Main بهعنوان handler برای event شیء تعریف شده، register میشود:
MyEvent evt = new MyEvent(); evt.SomeEvent += Handler;
دقت کنید که handler از طریق += افزوده شده است. event ها فقط از += و -= پیشتیبانی میکنند. در نهایت میبینید که event بهصورت زیر fire شده است:
evt.OnSomeEvent();
فراخوانی ()OnSomeEvent موجب میشود تا تمامی event handler های register شده، فراخوانی شوند. در این مورد تنها یک handler را register کرده بودیم اما میتوانید تعداد بیشتری را نیز register کنید.
در مثال زیر نحوهی استفاده از lambda expression با event را میبینید:
using System; delegate void MyEventHandler(int n); class MyEvent { public event MyEventHandler SomeEvent; public void OnSomeEvent(int n) { if (SomeEvent != null) SomeEvent(n); } } class LambdaEventDemo { static void Main() { MyEvent evt = new MyEvent(); // Use a lambda expression as an event handler. evt.SomeEvent += (n) => Console.WriteLine("Event received. Value is " + n); // Raise (fire) the event twice. evt.OnSomeEvent(1); evt.OnSomeEvent(2); } } /* Output Event received. Value is 1 Event received. Value is 2 */
استفاده از List در سیشارپ
یک آرایه بهصورت پویا اندازهاش تغییر نمیکند اما List بهصورت پویا resize میشود. با استفاده از List دیگر نیاز ندارید تا اندازهی آن را ابتدای کار مشخص کنید و در واقع با استفاده از List آرایهای میسازید که اندازهی محدود نیست.
فرم کلی List به شکل زیر است:
List list-name = new List();
در اینجا، کلمهی کلیدی List بیانکنندهی این امر است که قصد ساخت یک collection از نوع List را داریم. type مشخصکنندهی جنس List است که میتواند int و string و … باشد.
در مثال زیر ابتدا یک List از جنس int تعریف میکنیم (بدون مشخص کردن اندازه) و سپس مقادیری را به آن میافزاییم. مقادیر به همان ترتیبی که افزوده شدهاند در List ذخیره میشوند:
using System; using System.Collections.Generic; class Program { static void Main() { List list = new List(); list.Add(2); list.Add(3); list.Add(5); list.Add(7); foreach (int item in list) { Console.WriteLine(item); } // Or Console.WriteLine(); // Count property on the List type, is equal to Length on arrays. for (int i = 0; i < list.Count; i++) { Console.WriteLine(list[i]); } } } /* Output 2 3 5 7 2 3 5 7 */
در این مثال، ابتدا یک List از جنس int تعریف کرده و سپس با فراخوانی متد ()Add مقادیر مختفی را در list ذخیره کردهایم. در ادامه میبینید که با استفاده از حلقه foreach میتوانید بهسادگی مقادیر درون list را نمایش دهید. هچنین مشاهده میکنید که توسط حلقهی for نیز میتوانید به مقادیر درون list دسترسی داشته باشید. نکته مورد توجه در حلقهی for برای استفاده از list، Count property است که معادل length property در هنگام استفاده از آرایه میباشد.
به مثال بعد توجه کنید:
using System; using System.Collections.Generic; class Program { static void Main() { List<bool> list = new List<bool>(); list.Add(true); list.Add(false); list.Add(true); Console.WriteLine(list.Count); // 3 list.Clear(); Console.WriteLine(list.Count); // 0 } } /* Output 0 3 */
همانطور که در مثال بالا مشاهده میکنید، list.Count تعداد عناصر ذخیره شده در List است. بعد از فراخوانی ()Clear تمامی عناصر ذخیره شده در List از بین میروند.
به مثال بعد توجه کنید:
using System; using System.Collections.Generic; class Program { static void Main() { int[] arr = new int[3]; // New array with 3 elements arr[0] = 2; arr[1] = 3; arr[2] = 5; List list = new List(arr); // Copy to List Console.WriteLine(list.Count); // 3 elements in List } } /* Output 3 */
همانطور که میبینید، میتوانید یک آرایهی از پیش آماده شده را مستقیماً درون یک List کپی کنید.
به مثال زیر توجه کنید:
using System; using System.Collections.Generic; class Program { static void Main() { List list = new List(new int[] { 19, 23, 29 }); // Finds first element greater than 20 int result = list.Find(item => item > 20); Console.WriteLine(result); } } /* Output 23 */
یکی دیگر از متدهای List متد ()Find است که غالباً از lambda expression استفاده میکند.
List شامل متدهای بسیاری است که برای مطالعهی آنها میتوانید این لینک را ببینید.
بیژن
19 March 2014
سلام
قرار بود صد قسمت باشد چرا در نوشتید قسمت پایانی؟
مسعود درویشیان
19 March 2014
سلام. الان احتمالاً این سوال واسه همه پیش اومده که چرا 50 قسمت؟ مگه قرار نبود 100 قسمت باشه؟
وقتی شروع به نوشتن زنگ سیشارپ کردم، همزمان با انتشار هر قسمت، قسمت بعد در حال آمادهسازی بود و اینطور بود که مقالهها کامل نوشته نشده بودن و تخمین میزدم اگه بخوام همهی سرفصلهای مهم سیشارپ رو بگم حدوداً ممکنه 100 قسمت بشه تا اینکه به قسمت 50 رسیدیم و با توجه به اینکه حجم هر قسمت حدود 10 صفحه بود و سریع پیش رفتیم، دیدم که الان همهی سرفصلهای مهم رو گفتم و عملاً چیزه اساسی دیگهای نمونده و اگه بخوام تا 100 بگم باید وارد جزییاتی بشم که هدفم واسه نوشتن این مقاله، اون جزییات نیستن! من اگه بخوام میتونم تا 500 قسمت هم مطلب بنویسیم و باز هم تموم نمیشه و مطلب هست که بگم. الان همین 50 قسمت رو اگه یه کتاب در نظر بگیرید، یه کتاب 500 صفحهای میشه که واسه یادگیری برنامهنویسی مناسبه!
توی این 50 قسمت تمام سرفصلهای مهم و ضروری سیشارپ رو گفتم و هرکسی که این 50 قسمت رو خوب تمرین کنه و بفهمه، راحت میتونه یه پلتفرم رو انتخاب کنه و شروع به یادگیری و کدنویسی روی اون پلتفرم بکنه و وارد بازار کار بشه. البته همیشه و مطلب واسه یادگیری هست و این 50 قسمت صرفاً یه شروع خوب واسه ورود به دنیای برنامهنویسی و سیشارپ هست اما تمام برنامهنویسی نیست و حالا حالاها باید یاد بگیرید و تمرین کنید تا تخصص پیدا کنید. امیدوارم که این مجموعه واسه شروع برنامهنویسی براتون مفید واقع بشه
توی سال 93 هم آموزشهای زیادی رو سعی میکنم توی سایت قرار بدم
موفق باشید.
شیوا
4 May 2014
خواهشا برام ی برنامه بزار دانلود کنم سی شارپ باشه لطفا
فرزاد
19 March 2014
خيلي خيلي ممنون به قول خودتون همين واسه شروع كار كافي هست ولي من اميدوارم بازم آموزش هاي خوبتون رو براي سال 93 داشته باشيم و اميدوارم سال 93 سالي پر از موفقيت براي شما همراه با شادي و سلامتي در كنار خانوادتون باشه
بي نهايت متشكرم.
نسیم
20 March 2014
سلام
ممنون آقای درویشیان
خدا قوت …..
آموزش ها حقیقتا عالی است.
امیدوارم سال خوب و پربرکتی داشته باشید.
بیژن
20 March 2014
سال نو را تبریک عرض میکنم واز زحمات شما برای آموزش زبان سی شارپ تشکر میکنم
داود حاجی پور
20 March 2014
جناب آقای مهندس درویشیان واقعا خسته نباشید از این پنجاه قسمت بنحو احسن استفاده بردم واقعا عالی بود ، بی صبرانه منتظرم که تو سال 1393 می خوایین چه شاهکاری بکنین .
شاهکار از این بابت که واقعا سایت های ایرانی چیزی برای آموزش اونم تو این سطح و بروز شده ندارن و واقعا کار شما شاهکار بود بازم تشکر و سالی پر از کامیابی و ثروت برات آرزومندم ، قربانت داود
elmo
20 March 2014
سلام مهندس
واقعا کارت عالی بود
امیدوارم سال 93 سال خوبی برات باشه
مدافع
21 March 2014
مقاله خیلی خوبی بود/
فروشگاه عروسک
23 March 2014
ممنون مقاله جالبیه به درد بخور و کامل
فرزاد
1 April 2014
سلام خسته نباشيد خيلي دوست دارم يه سوالي به پرسم به اين مطلب مربوط نيست ولي ديگه نميدونستم بايد كجا بپرسم
خواستم بگم سايت به اين خوبي چرا بخش هاي ديگه سايت فعال نيست مثل ايده و خلاقيت چرا ديگه بقيه نويسنده ها مطلبي نميذارن؟ حتي ببخشيد كه ميگم ولي C# هم خيلي دير به دير به روز رساني ميشد من نميخوام قدر نشناس باشم واقعا متشكرم ولي خواستم بگم دوست دارم اين سايت بيشر فعال باشه همين.
Arian
18 April 2014
سلام خدمت شما جناب آقاي درويشيان
اميدوارم خوب باشيد…
لطفا ميشه راهنمايي كنيد براي ادمه سي شارپ چه عملي بايد انجام دهيم؟
من به خاطر اين همه زحمات شما سپاسگزارم.
اميدوارم موفق وپيروز باشيد.
مسعود درویشیان
18 April 2014
سلام ممنون از لطفتون
اول اینکه سعی کنید به مطالب ارائه شده تسلط کافی پیدا کنید و بعد تصمیم بگیرید که روی چه پلتفرمی دوست دارین بیشتر فعالیت کنین. مثلاً اگه به برنامهنویسی server-side علاقه دارین میتونین ASP.NET (با توجه به اینکه سیشارپ بلدین) کار کنید یا اگه به برنامهنویسی موبایل علاقه داشته باشید میتونین واسه همون پلتفرم برنامه بنویسید یا هر چیزه دیگه. چیزی که خیلی مهمه این هست که باید پیوسته در حال کتاب خوندن در زمینه برنامهنویسی باشید و زیاد تمرین کنید. بهعلاوه اینکه زبان انگلیسیتون هم قوی کنید چون کتاب فارسی درست حسابی تو زمینهی برنامهنویسی معمولاً پیدا نمیشه!
در کل بعد از اینکه سیشارپ رو در حد قابل قبولی یاد گرفتین، باید پلتفرم مورد علاقهتون رو پیدا کنید و در موردش کتاب بخونید و تمرین کنید.
مهدی شکری
21 April 2014
سلام و عرض ادب خدمت جناب درویشیان
بابت این همه زحمت نوشتن و این جزئیاتی که بیان کردید متشکرم. امیدوارم در کار و زندگی موفق باشید و عاقبت به خیر شوید. خدا پدر و مادرتون رو بیامرزه واقعا
اسماعیل
23 April 2014
سلام لطفا اگه ممکنه هر چی تمرین حل کرده دارید برام بفرستید دهم میانترم شی گرایی دارم با تشکر از سایت خوبتون
مریم
24 May 2014
خسته نباشید این برنامه ها ماله دات نت چنده؟
مسعود درویشیان
24 May 2014
4
تشک بادی
25 May 2014
سلام و خسته نباشید.با تشکر از سایت خوبتون.
خدا قوت
تور ترکیه
3 June 2014
خدا خیرتون بده
alireza
21 July 2014
سلام جناب مهندس.خدا خیرتون بده.خیلی مطالتون عالی بود .واقعا حال کردن.جناب مهندس آموزش asp.net رو هم امکانش هست آموزش بدید؟
خیلی خیلی ممنون
طراحی سایت
18 August 2014
متشکرم از سایت خوشگلتون.
مسعود
30 August 2014
با سلام
احتراما” از لطف جتابعالي كمال تشكر را دارم . بهتر است محيط گرافيكي را تدريس قرماييد تا كار شروع شده نيمه تمام نماند .
طراحی سایت
22 October 2014
بسیار ممنون
کوتاه کننده لینک
21 November 2014
بسیار عالی بود ممنون از زحماتتون سایت بسیار پر محتوایی دارید و قابل استفاده امیدوارم راهتون رو ادامه بدید
AliScan
13 December 2014
سلام
من تمام آموزشهاتون رو دانلود کردم،گفتم حداقل کاری که می تونم بکنم تشکره،خواستم ازتون تشکر کنم بابت زحمتی کشیدین واسه این آموزش
اگه همین کد نویسی رو تو زمینه بازیسازی،انجینی مثل یونیتی هم آموزش بدین دیگه ترکوندین☺
با تـــــــــشکر♥
حسن نادی
22 December 2014
سلام دوستان خسته نباشید
کسی سورس یا آموزش رسم لوزی با ستاره رو در سی شارپ نداره
واقعان برام مهمه اگر دارید به این ایمیل برام بفرستید
[email protected]
پویا
26 December 2014
واقعا عالی بود
خدا عمرت بده
دستت درد نکنه
آپلود عکس
20 January 2015
آموزش خیلی مفید و کاملی بود ، یک دنیا ممنون !
دالاهو
27 January 2015
سلام ، آموزش خیلی خوبی بود
ممنون از سایت خوبتون
لطفا در صورت امکان آموزش گام به گام css رو در سایت قرار بدید
ماشین ظرفشویی
7 February 2015
عالی بود ، با سپاس فراوان از زحمات شما
میلاد
15 March 2015
ممنون، خیلی به درد خورد مهندس…
پرشین نایس
25 March 2015
عالی بود سایت بسیار خوبی دارید با تشکر از شما
برنامه نویس
31 March 2015
با عرض سلام و خسته نباشید و تشکر ویژه بخاطر انتشار دادن و نوشتن مقالات آموزشی در این سطح – من برخی از مقالات و بخش ها رو خوندم و واقعا لذت بردم – نحوه نگارشتون خیلی شبیه برادران البهاری – نویسندگان کتاب سی شارپ این نات شل هست – بدون اعراق واقعا لذت بردم و وظیقه دونستم تشکر کنم .
همیشه شاد و موفق و سلامت باشید و
هادی
10 April 2015
خیلی خیلی عالی بود واقعا خسته نباشید .
امین
3 May 2015
ممنون از مقاله بسیار خوب و آموزندتون
سجاد
20 May 2015
“علاقه مند به موسیقی و برنامه نویسی بازی”
با عرض سلام
ممنون میشم برنامه نویسی بازی هم آموزش بدید
اگه آموزش اسکیریپت نویسی با C# تو موتور unity رو بذارید خیلی عالی میشه (مخصوصا الان که آموزش سی شارپ تموم شده) :)
fmoasher
3 June 2015
باسلام وخسته نباشید
مدت زیادی بود دنبال همچین سایت اموزشی میگشتم واقعا ازتون ممنونم
خیلی واسم مفید بود…
منصوره
21 June 2015
ممنون اجرتون با خدا
البته من هنوز جلسه 10 هستم ولی واقعا دارم لذت میبرم
علیرضا
9 July 2015
خیلی ممنون آموزش بسیار مفید بود یه دنیا ممنون.
رضا
17 July 2015
با سلام آقای مهندس یا دوست عزیزم ممنونم از اموزشی که
ذاشته بودید قرار بود در سال 93 و 94 ادامه ی قسمت های سی شارپ از قسمت 51 به بعد را هم بزاری ممنون میشم اینکار را کنی تا ما هم از این اطلاعاتون استفاده کنیم
فرهاد
21 July 2015
سلام و درود و خسته نباشید
مهندس درویشیان ممنون بابت آموزش سی شارپی که ارایه دادین
اول خوشحالم از اینکه در قسمت پایانی خداحافظی نکردید :)
این به معنی این هست که بازم شما مطلب آموزشی سی شارپ خواهید گذاشت عایا ؟
اگه در سایت دیگه ای فعالیت میکنید به منم خبر بدید
من سی شارپ رو میخوام در سطح پیشرفته دنبال کنم و پیگیر هم هستم
لطفا راهنمایی کنید
با تشکر
کامران
9 August 2015
به نظرم در قسمت اموزش List این خط اشتباه نوشته شده
List list = new List();
فکر کنم باید جنریک باشه
به این صورت
List list = new List(); //Generic
درسته ؟
فروشگاه عروسک
5 September 2015
واقعا اموزش مفیدی بود من که خیلی وقته سی شارپ کار می کنم از این مقالات چیزهای مفیدی یاد گرفتم ممنون
mahsa
17 September 2015
واقعا دستتون درد نکنه
خیلی عالی بودن مطالب
مفید و قابل درک
جواد بابایی
9 October 2015
سلام دوستان این اموزش ادامه داره؟
آقا من می خوام برنامه های گرافیکی بنویسم مهندس اگر میشه اونا رو هم توضیح بدین مثلا کار کردن با pen چرخوندن اشکال نوشتن ربات یکسری برنامه های گرافیکی باید از کجا شروع کرد؟
طراحی سایت
22 October 2015
بسیار عالی بود، ممنون بابت به اشتراک گذاری
بچینگ پلانت
19 November 2015
بسیار عالی بود مرسی
میثم
14 December 2015
سلام ممنون از مقالات خوبی که گذاشتین
من یک سوال داشتم که خیلی دنبالش گشتم ولی نتونستم جایی پیدا کنم
سوالم اینه که وقتی تو سی شارپ بخواییم از روی یک فایل داده ها رو بخونیم و کاراکتر به کاراکتر پیمایش کنیم چیکار باید کنیم؟یعنی چطور میشه داده های روی یک خط و به متغیر های تعریف شده منتسب کنیم؟؟
ممنون میشم جوابمو بدین
حمید
3 July 2016
خسه نباشی جوون
سامان
7 July 2016
واقعا که عالی بود مرسی
hossein
14 September 2016
بسیار بسیار عالی بود ممنون
Soltani
27 September 2016
با درود
عالی بود , خیلی دنبال این نوشتارها بودم ,
همیشه موفق و سرفراز باشید
علیرضا
11 October 2016
سلام خسته نباشید
بسیار عالی بود ..
فقط سوالم این هستش که آیا الگوریتم و فلوچارت رو هم میشه به صورت شی گرا نوشت یا باید به روش معمول نوشت و موقع کد کردن شی گرا بنویسیم؟!
خیلی ممنون میشم پاسخ بدین …
ماه
22 November 2016
سلام خدمت جناب مهندس درویشیان خیلی خیلی ازتون ممنونم ازتون میخوام این آموزش ادامه پیدا کنه.کمتر کسی مثه شما با جزئیات کامل و بصورت قابل درک مطلب مینویسه.امیدوارم موفق و سربلند باشین همیشه
محمد
6 February 2017
با عرض سلام و خسته نباشید ،، من واقعن از سایت و آموزش هایی خیلیی معرکه و خوبی که حتی پی دی افش رو برا دانلود قرار دادین خیلییییی ممنون و سپاس گذارم هم لذت بردم هم کارم راه افتاد خیلیی مرسییییی ، ان شالله همینجوری که با این کار خیرخواهانه باعث شدید گره کار عده ای باز بشه امیدوارم که در زندگی و کارتون هیچوقت گره ای نباشه و اگر هم خدایی نکرده بود از خدا میخوام که سبب بسازه تا خیلی راحت مشکلاتتون حل بشه و همیشه در زندگی و کارتون شاد و موفق و سربلند باشید @–>–
حمید
4 April 2017
ممنون از آموزش خوب شما
عطاوالله
24 May 2017
Ring Buffer میشه لطف کنید در بار این موضوع کمی توضحی دهید.
ratin
30 July 2017
با تشکر از آموزش خوبتون
سبحان
8 December 2017
با سلام و تشکر بابت این آموزش های خوب
موفق و پیروز باشید
امین شمس الهی
22 February 2018
سلام.اگه لطف کنید،درباره ایجاد گرافیک چند لایه در سی شارپ توضیح دهید.مثلا واسه یه برنامه شبیه اتوکد که وقتی موس رو به یه نقطه نزدیک می کنیم.یه مستطیل طلایی کوچیک روی نقطه ایجاد میشه.وبا دور کردن موس مستطیل ناپدید میشه و یا با بردن موس روی خطوط پررنگ میشن.می خوام که اشکالی که کشیده شدن در یه لایه باشند،و این مستطیل ها و یا پررنگ شدن خطوط در لایه دیگر.
حامد
17 December 2018
درود بیکران بر شما آقای درویشیان عزیز. چون من تازه با سایت شما آشنا شدم و تازه میخام یونیتی و سی شارپ رو یاد بگیرم ، پس سوالی در این زمینه ندارم غیر اینکه قسمت 16 همین مطالب رو نتونستم پیدا کنم. لطفا یا قالب پی دی افش و یا آدرس صفحه اش را به ایمیلم بفرستید برای دانلود … سپاسگزارم. موفق و مانا باشید.
رضا
23 October 2019
ای کاش 500 قسمت بود . تا قسمت 47 آموزشتونو سال 92 همراهی کردم بعد اینهمه سال باز یادی کردم دیدم چندقسمت دیگه اضافه شده . آموزشا ساده و کاربردی بود .فوق العاده . متشکر