استفاده از 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 ۰ ۱ ۲ ۳ ۴ ۵ */
در این برنامه ابتدا یک 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 ۰ ۱ ۲ ۳ ۰ ۱ ۲ ۳ ۴ ۵ */
همانطور که میبینید، 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: -۱۰ -۸ -۶ -۴ -۲ ۰ Use isEven lambda expression: ۲ is even. ۴ is even. ۶ is even. ۸ is even. ۱۰ 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 ۲ ۳ ۵ ۷ ۲ ۳ ۵ ۷ */
در این مثال، ابتدا یک 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 ۰ ۳ */
همانطور که در مثال بالا مشاهده میکنید، 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 ۳ */
همانطور که میبینید، میتوانید یک آرایهی از پیش آماده شده را مستقیماً درون یک 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 ۲۳ */
یکی دیگر از متدهای List متد ()Find است که غالباً از lambda expression استفاده میکند.
List شامل متدهای بسیاری است که برای مطالعهی آنها میتوانید این لینک را ببینید.
بیژن
19 مارس 2014
سلام
قرار بود صد قسمت باشد چرا در نوشتید قسمت پایانی؟
مسعود درویشیان
19 مارس 2014
سلام. الان احتمالاً این سوال واسه همه پیش اومده که چرا ۵۰ قسمت؟ مگه قرار نبود ۱۰۰ قسمت باشه؟
وقتی شروع به نوشتن زنگ سیشارپ کردم، همزمان با انتشار هر قسمت، قسمت بعد در حال آمادهسازی بود و اینطور بود که مقالهها کامل نوشته نشده بودن و تخمین میزدم اگه بخوام همهی سرفصلهای مهم سیشارپ رو بگم حدوداً ممکنه ۱۰۰ قسمت بشه تا اینکه به قسمت ۵۰ رسیدیم و با توجه به اینکه حجم هر قسمت حدود ۱۰ صفحه بود و سریع پیش رفتیم، دیدم که الان همهی سرفصلهای مهم رو گفتم و عملاً چیزه اساسی دیگهای نمونده و اگه بخوام تا ۱۰۰ بگم باید وارد جزییاتی بشم که هدفم واسه نوشتن این مقاله، اون جزییات نیستن! من اگه بخوام میتونم تا ۵۰۰ قسمت هم مطلب بنویسیم و باز هم تموم نمیشه و مطلب هست که بگم. الان همین ۵۰ قسمت رو اگه یه کتاب در نظر بگیرید، یه کتاب ۵۰۰ صفحهای میشه که واسه یادگیری برنامهنویسی مناسبه!
توی این ۵۰ قسمت تمام سرفصلهای مهم و ضروری سیشارپ رو گفتم و هرکسی که این ۵۰ قسمت رو خوب تمرین کنه و بفهمه، راحت میتونه یه پلتفرم رو انتخاب کنه و شروع به یادگیری و کدنویسی روی اون پلتفرم بکنه و وارد بازار کار بشه. البته همیشه و مطلب واسه یادگیری هست و این ۵۰ قسمت صرفاً یه شروع خوب واسه ورود به دنیای برنامهنویسی و سیشارپ هست اما تمام برنامهنویسی نیست و حالا حالاها باید یاد بگیرید و تمرین کنید تا تخصص پیدا کنید. امیدوارم که این مجموعه واسه شروع برنامهنویسی براتون مفید واقع بشه
توی سال ۹۳ هم آموزشهای زیادی رو سعی میکنم توی سایت قرار بدم
موفق باشید.
شیوا
4 می 2014
خواهشا برام ی برنامه بزار دانلود کنم سی شارپ باشه لطفا
فرزاد
19 مارس 2014
خیلی خیلی ممنون به قول خودتون همین واسه شروع کار کافی هست ولی من امیدوارم بازم آموزش های خوبتون رو برای سال ۹۳ داشته باشیم و امیدوارم سال ۹۳ سالی پر از موفقیت برای شما همراه با شادی و سلامتی در کنار خانوادتون باشه
بی نهایت متشکرم.
نسیم
20 مارس 2014
سلام
ممنون آقای درویشیان
خدا قوت …..
آموزش ها حقیقتا عالی است.
امیدوارم سال خوب و پربرکتی داشته باشید.
بیژن
20 مارس 2014
سال نو را تبریک عرض میکنم واز زحمات شما برای آموزش زبان سی شارپ تشکر میکنم
داود حاجی پور
20 مارس 2014
جناب آقای مهندس درویشیان واقعا خسته نباشید از این پنجاه قسمت بنحو احسن استفاده بردم واقعا عالی بود ، بی صبرانه منتظرم که تو سال ۱۳۹۳ می خوایین چه شاهکاری بکنین .
شاهکار از این بابت که واقعا سایت های ایرانی چیزی برای آموزش اونم تو این سطح و بروز شده ندارن و واقعا کار شما شاهکار بود بازم تشکر و سالی پر از کامیابی و ثروت برات آرزومندم ، قربانت داود
elmo
20 مارس 2014
سلام مهندس
واقعا کارت عالی بود
امیدوارم سال ۹۳ سال خوبی برات باشه
مدافع
21 مارس 2014
مقاله خیلی خوبی بود/
فروشگاه عروسک
23 مارس 2014
ممنون مقاله جالبیه به درد بخور و کامل
فرزاد
1 آوریل 2014
سلام خسته نباشید خیلی دوست دارم یه سوالی به پرسم به این مطلب مربوط نیست ولی دیگه نمیدونستم باید کجا بپرسم
خواستم بگم سایت به این خوبی چرا بخش های دیگه سایت فعال نیست مثل ایده و خلاقیت چرا دیگه بقیه نویسنده ها مطلبی نمیذارن؟ حتی ببخشید که میگم ولی C# هم خیلی دیر به دیر به روز رسانی میشد من نمیخوام قدر نشناس باشم واقعا متشکرم ولی خواستم بگم دوست دارم این سایت بیشر فعال باشه همین.
Arian
18 آوریل 2014
سلام خدمت شما جناب آقای درویشیان
امیدوارم خوب باشید…
لطفا میشه راهنمایی کنید برای ادمه سی شارپ چه عملی باید انجام دهیم؟
من به خاطر این همه زحمات شما سپاسگزارم.
امیدوارم موفق وپیروز باشید.
مسعود درویشیان
18 آوریل 2014
سلام ممنون از لطفتون
اول اینکه سعی کنید به مطالب ارائه شده تسلط کافی پیدا کنید و بعد تصمیم بگیرید که روی چه پلتفرمی دوست دارین بیشتر فعالیت کنین. مثلاً اگه به برنامهنویسی server-side علاقه دارین میتونین ASP.NET (با توجه به اینکه سیشارپ بلدین) کار کنید یا اگه به برنامهنویسی موبایل علاقه داشته باشید میتونین واسه همون پلتفرم برنامه بنویسید یا هر چیزه دیگه. چیزی که خیلی مهمه این هست که باید پیوسته در حال کتاب خوندن در زمینه برنامهنویسی باشید و زیاد تمرین کنید. بهعلاوه اینکه زبان انگلیسیتون هم قوی کنید چون کتاب فارسی درست حسابی تو زمینهی برنامهنویسی معمولاً پیدا نمیشه!
در کل بعد از اینکه سیشارپ رو در حد قابل قبولی یاد گرفتین، باید پلتفرم مورد علاقهتون رو پیدا کنید و در موردش کتاب بخونید و تمرین کنید.
مهدی شکری
21 آوریل 2014
سلام و عرض ادب خدمت جناب درویشیان
بابت این همه زحمت نوشتن و این جزئیاتی که بیان کردید متشکرم. امیدوارم در کار و زندگی موفق باشید و عاقبت به خیر شوید. خدا پدر و مادرتون رو بیامرزه واقعا
اسماعیل
23 آوریل 2014
سلام لطفا اگه ممکنه هر چی تمرین حل کرده دارید برام بفرستید دهم میانترم شی گرایی دارم با تشکر از سایت خوبتون
مریم
24 می 2014
خسته نباشید این برنامه ها ماله دات نت چنده؟
مسعود درویشیان
24 می 2014
۴
تشک بادی
25 می 2014
سلام و خسته نباشید.با تشکر از سایت خوبتون.
خدا قوت
تور ترکیه
3 ژوئن 2014
خدا خیرتون بده
alireza
21 جولای 2014
سلام جناب مهندس.خدا خیرتون بده.خیلی مطالتون عالی بود .واقعا حال کردن.جناب مهندس آموزش asp.net رو هم امکانش هست آموزش بدید؟
خیلی خیلی ممنون
طراحی سایت
18 آگوست 2014
متشکرم از سایت خوشگلتون.
مسعود
30 آگوست 2014
با سلام
احتراما” از لطف جتابعالی کمال تشکر را دارم . بهتر است محیط گرافیکی را تدریس قرمایید تا کار شروع شده نیمه تمام نماند .
طراحی سایت
22 اکتبر 2014
بسیار ممنون
کوتاه کننده لینک
21 نوامبر 2014
بسیار عالی بود ممنون از زحماتتون سایت بسیار پر محتوایی دارید و قابل استفاده امیدوارم راهتون رو ادامه بدید
AliScan
13 دسامبر 2014
سلام
من تمام آموزشهاتون رو دانلود کردم،گفتم حداقل کاری که می تونم بکنم تشکره،خواستم ازتون تشکر کنم بابت زحمتی کشیدین واسه این آموزش
اگه همین کد نویسی رو تو زمینه بازیسازی،انجینی مثل یونیتی هم آموزش بدین دیگه ترکوندین☺
با تـــــــــشکر♥
حسن نادی
22 دسامبر 2014
سلام دوستان خسته نباشید
کسی سورس یا آموزش رسم لوزی با ستاره رو در سی شارپ نداره
واقعان برام مهمه اگر دارید به این ایمیل برام بفرستید
hnadi35@yahoo.com
پویا
26 دسامبر 2014
واقعا عالی بود
خدا عمرت بده
دستت درد نکنه
آپلود عکس
20 ژانویه 2015
آموزش خیلی مفید و کاملی بود ، یک دنیا ممنون !
دالاهو
27 ژانویه 2015
سلام ، آموزش خیلی خوبی بود
ممنون از سایت خوبتون
لطفا در صورت امکان آموزش گام به گام css رو در سایت قرار بدید
ماشین ظرفشویی
7 فوریه 2015
عالی بود ، با سپاس فراوان از زحمات شما
میلاد
15 مارس 2015
ممنون، خیلی به درد خورد مهندس…
پرشین نایس
25 مارس 2015
عالی بود سایت بسیار خوبی دارید با تشکر از شما
برنامه نویس
31 مارس 2015
با عرض سلام و خسته نباشید و تشکر ویژه بخاطر انتشار دادن و نوشتن مقالات آموزشی در این سطح – من برخی از مقالات و بخش ها رو خوندم و واقعا لذت بردم – نحوه نگارشتون خیلی شبیه برادران البهاری – نویسندگان کتاب سی شارپ این نات شل هست – بدون اعراق واقعا لذت بردم و وظیقه دونستم تشکر کنم .
همیشه شاد و موفق و سلامت باشید و
هادی
10 آوریل 2015
خیلی خیلی عالی بود واقعا خسته نباشید .
امین
3 می 2015
ممنون از مقاله بسیار خوب و آموزندتون
سجاد
20 می 2015
“علاقه مند به موسیقی و برنامه نویسی بازی”
با عرض سلام
ممنون میشم برنامه نویسی بازی هم آموزش بدید
اگه آموزش اسکیریپت نویسی با C# تو موتور unity رو بذارید خیلی عالی میشه (مخصوصا الان که آموزش سی شارپ تموم شده) :)
fmoasher
3 ژوئن 2015
باسلام وخسته نباشید
مدت زیادی بود دنبال همچین سایت اموزشی میگشتم واقعا ازتون ممنونم
خیلی واسم مفید بود…
منصوره
21 ژوئن 2015
ممنون اجرتون با خدا
البته من هنوز جلسه ۱۰ هستم ولی واقعا دارم لذت میبرم
علیرضا
9 جولای 2015
خیلی ممنون آموزش بسیار مفید بود یه دنیا ممنون.
رضا
17 جولای 2015
با سلام آقای مهندس یا دوست عزیزم ممنونم از اموزشی که
ذاشته بودید قرار بود در سال ۹۳ و ۹۴ ادامه ی قسمت های سی شارپ از قسمت ۵۱ به بعد را هم بزاری ممنون میشم اینکار را کنی تا ما هم از این اطلاعاتون استفاده کنیم
فرهاد
21 جولای 2015
سلام و درود و خسته نباشید
مهندس درویشیان ممنون بابت آموزش سی شارپی که ارایه دادین
اول خوشحالم از اینکه در قسمت پایانی خداحافظی نکردید :)
این به معنی این هست که بازم شما مطلب آموزشی سی شارپ خواهید گذاشت عایا ؟
اگه در سایت دیگه ای فعالیت میکنید به منم خبر بدید
من سی شارپ رو میخوام در سطح پیشرفته دنبال کنم و پیگیر هم هستم
لطفا راهنمایی کنید
با تشکر
کامران
9 آگوست 2015
به نظرم در قسمت اموزش List این خط اشتباه نوشته شده
List list = new List();
فکر کنم باید جنریک باشه
به این صورت
List list = new List(); //Generic
درسته ؟
فروشگاه عروسک
5 سپتامبر 2015
واقعا اموزش مفیدی بود من که خیلی وقته سی شارپ کار می کنم از این مقالات چیزهای مفیدی یاد گرفتم ممنون
mahsa
17 سپتامبر 2015
واقعا دستتون درد نکنه
خیلی عالی بودن مطالب
مفید و قابل درک
جواد بابایی
9 اکتبر 2015
سلام دوستان این اموزش ادامه داره؟
آقا من می خوام برنامه های گرافیکی بنویسم مهندس اگر میشه اونا رو هم توضیح بدین مثلا کار کردن با pen چرخوندن اشکال نوشتن ربات یکسری برنامه های گرافیکی باید از کجا شروع کرد؟
طراحی سایت
22 اکتبر 2015
بسیار عالی بود، ممنون بابت به اشتراک گذاری
بچینگ پلانت
19 نوامبر 2015
بسیار عالی بود مرسی
میثم
14 دسامبر 2015
سلام ممنون از مقالات خوبی که گذاشتین
من یک سوال داشتم که خیلی دنبالش گشتم ولی نتونستم جایی پیدا کنم
سوالم اینه که وقتی تو سی شارپ بخواییم از روی یک فایل داده ها رو بخونیم و کاراکتر به کاراکتر پیمایش کنیم چیکار باید کنیم؟یعنی چطور میشه داده های روی یک خط و به متغیر های تعریف شده منتسب کنیم؟؟
ممنون میشم جوابمو بدین
حمید
3 جولای 2016
خسه نباشی جوون
سامان
7 جولای 2016
واقعا که عالی بود مرسی
hossein
14 سپتامبر 2016
بسیار بسیار عالی بود ممنون
Soltani
27 سپتامبر 2016
با درود
عالی بود , خیلی دنبال این نوشتارها بودم ,
همیشه موفق و سرفراز باشید
علیرضا
11 اکتبر 2016
سلام خسته نباشید
بسیار عالی بود ..
فقط سوالم این هستش که آیا الگوریتم و فلوچارت رو هم میشه به صورت شی گرا نوشت یا باید به روش معمول نوشت و موقع کد کردن شی گرا بنویسیم؟!
خیلی ممنون میشم پاسخ بدین …
ماه
22 نوامبر 2016
سلام خدمت جناب مهندس درویشیان خیلی خیلی ازتون ممنونم ازتون میخوام این آموزش ادامه پیدا کنه.کمتر کسی مثه شما با جزئیات کامل و بصورت قابل درک مطلب مینویسه.امیدوارم موفق و سربلند باشین همیشه
محمد
6 فوریه 2017
با عرض سلام و خسته نباشید ،، من واقعن از سایت و آموزش هایی خیلیی معرکه و خوبی که حتی پی دی افش رو برا دانلود قرار دادین خیلییییی ممنون و سپاس گذارم هم لذت بردم هم کارم راه افتاد خیلیی مرسییییی ، ان شالله همینجوری که با این کار خیرخواهانه باعث شدید گره کار عده ای باز بشه امیدوارم که در زندگی و کارتون هیچوقت گره ای نباشه و اگر هم خدایی نکرده بود از خدا میخوام که سبب بسازه تا خیلی راحت مشکلاتتون حل بشه و همیشه در زندگی و کارتون شاد و موفق و سربلند باشید @–>–
حمید
4 آوریل 2017
ممنون از آموزش خوب شما
عطاوالله
24 می 2017
Ring Buffer میشه لطف کنید در بار این موضوع کمی توضحی دهید.
ratin
30 جولای 2017
با تشکر از آموزش خوبتون
سبحان
8 دسامبر 2017
با سلام و تشکر بابت این آموزش های خوب
موفق و پیروز باشید
امین شمس الهی
22 فوریه 2018
سلام.اگه لطف کنید،درباره ایجاد گرافیک چند لایه در سی شارپ توضیح دهید.مثلا واسه یه برنامه شبیه اتوکد که وقتی موس رو به یه نقطه نزدیک می کنیم.یه مستطیل طلایی کوچیک روی نقطه ایجاد میشه.وبا دور کردن موس مستطیل ناپدید میشه و یا با بردن موس روی خطوط پررنگ میشن.می خوام که اشکالی که کشیده شدن در یه لایه باشند،و این مستطیل ها و یا پررنگ شدن خطوط در لایه دیگر.
حامد
17 دسامبر 2018
درود بیکران بر شما آقای درویشیان عزیز. چون من تازه با سایت شما آشنا شدم و تازه میخام یونیتی و سی شارپ رو یاد بگیرم ، پس سوالی در این زمینه ندارم غیر اینکه قسمت ۱۶ همین مطالب رو نتونستم پیدا کنم. لطفا یا قالب پی دی افش و یا آدرس صفحه اش را به ایمیلم بفرستید برای دانلود … سپاسگزارم. موفق و مانا باشید.
رضا
23 اکتبر 2019
ای کاش ۵۰۰ قسمت بود . تا قسمت ۴۷ آموزشتونو سال ۹۲ همراهی کردم بعد اینهمه سال باز یادی کردم دیدم چندقسمت دیگه اضافه شده . آموزشا ساده و کاربردی بود .فوق العاده . متشکر