<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>نوشته های بهنام</title><link>https://virgool.ir/feed/@behnamadel20</link><description></description><language>fa</language><pubDate>2026-11-12 06:23:23</pubDate><image><url>https://files.virgool.ir/upload/users/38481/avatar/avatar.png</url><title>بهنام</title><link>https://virgool.ir/@behnamadel20</link></image><item><title>یادگرفتن ساخت سایت را از کجا استارت بزنیم؟</title><link>https://virgool.ir/@behnamadel20/یادگرفتن-ساخت-سایت-را-از-کجا-استارت-کنیم-dqqa1rteyoz3</link><description>یادگرفتن ساخت سایت را از کجا استارت کنیمبا پهنا میشود سرویس کلیه هوا داران به ساخت سایت ، درین مبحث قصد داریم شمارا با فرآیند یادگیری ساخت وب سایت و برنامه نویسی زیر اینترنت آشنا کنیم و تحت عنوان برنامه نویس هایی که این‌شیوه را پیشین از شما طی کرده اند شمارا از فراز و نشیب های این‌شیوه شادی بخش باخبر نمائیم ، عملکرد ما بر این میباشد که از مطرح کردن مباحث مرتبط با تاریخچه و مبانی تئوری خودداری کرده و تا حد قابلیت و امکان شمارا با مسائل عملی در این باره آشنا نمائیم . خب پیش به سوی استارت ...برای یادگیری طراحی وب و آموزش برنامه نویسی چه مراحلی را باید گذراند؟در‌پی به مطرح شدن و شرح مراحلی که برای یادگیری و یاددادن ساخت وب سایت بایستی به ترتیب به سراغ آن ها بروید خوا هیم پرداخت :در بالا بایستی HTML را بیاموزید که مخفف Hyper Text Markup Language ( گویش نماد گذاری ابر متنی ) است ، آنچه در‌این گویش اهمیت دارااست این میباشد که HTML یک گویش برنامه نویسی وجود ندارد بلکه یک لهجه آرم گذاری میباشد ، شما با به کارگیری از این گویش به مرورگر می فهمانید کدام نصیب از برنامه شما یک جمله میباشد ، کجا جدول میباشد ، کجا عکس میباشد و به همین ترتیب درخصوص بقیه موادتشکیل دهنده جانور در صفحه ها اینترنت . تحت عنوان دانشجوی درس طراحی وب سایت در آغاز این لهجه را فرا بگیرید و جهت تسریع در یادگیری به نکاتی که پیرو اشاره شده‌است اعتنا نمائید :در یادگیری HTML با مواقعی از قبیل ویژگی (Attribute ) مواجه می‌شوید که به یاری برخی از این ویژگی ها میتوانید صورت و شمایل عنصر مربوطه را تغییر‌و تحول دهید برای مثال میتوانید رنگ متن را تغییر‌و تحول دهید و یا این که آن را به طور italic به اکران در بیاورید ، نیازی به یادگیری این موردها وجود ندارد به این دلیل که این طریق استایل دادن به موادسازنده HTML منسوخ گردیده و در صورتی‌که بخواهید وبسایتی پویا و خوشگل پباده سازی فرمایید می بایست از جادوی CSS استعمال فرمائید بدین ترتیب میتوانید از یادگیری ویژگی های مرتبط با ظواهر و استایل عنصرها دیده پوشی نمائید.در HTML شما با تعداد متعددی تگ ( برچسب ) روبرو می‌شوید و اسامی این تگ ها برای اشخاص مبتدی به شدت فرار و گریز میباشد لذا جمع آوری این تگ ها به همپا توضیح مختصری درباره‌ی تلاش آن میتواند شما در به خیال و خاطر سپردن آن یاری کند.در ورژن نو HTML یعنی HTML 5 موردها جدیدی از قبیل گرافیک ها ، مالتی مدیا و ... گنجانده شده‌است که در بالا و سوای احاطه بر Javascript برای شما پیچیده به لحاظ می‌رسد لذا نیازی وجود ندارد درین مرحله از یادگیری وقت خویش را صرف فراگیری این موردها نمائید .دقت داشته باشید که ساخت وب سایت تیم ای میباشد از یکسری لهجه ذیل اینترنت و شما تنها با یادگیری HTML نمی توانید سایت متبوع خویش را فعال سازی نمایید لذا در‌این مرحله صرفا تگ ها را بشناسید و عمل کرد آن‌ها‌را ملاحظه کنید.بعد از یادگیری HTML و شناخت بدون نقص با تگ ها بایستی به سراغ CSS برویم . در CSS شما به نحوه های متفاوت به به عبارتی تگ هایی که در HTML نوشته اید دسترسی پیدا کرده و استایل ( = ظواهر ، صورت و شمایل و ... ) متبوع خویش را به آنان می دهید . به عنوان مثال از روش CSS به مرورگری که کاغذ اینترنت شما‌را اکران میدهد می گوئید که پهنا عکس باطن برگه 200 پیکسل باشد ، طول آن 100 پیکسل و خطی مشکی به پهنا 10 پیکسل بدور آن بیندازد و ... . در پایان شما با یادگیری تمام استایل ها ، می‌توانید ظواهر وب سایت خویش را به طور بدون نقص پیاده سازی فرمایید . تحت عنوان تمرینی که خویش را بیازمایید توصیه ما به شما این میباشد که یک تارنما دلخواه را تعیین کرده و با به کارگیری از HTML و CSS آن را کد نویسی نمائید ، همت فرمائید تا حد ممکن تارنما شما مشابه آن تارنما شود ، معیار شباهت این دو ، ترازو یادگیری و اشراف شما بر HTML و CSS را نشان خواهد اعطا کرد.شاید مطرح کردن یک نمونه در اشراف هر چه بیش تر شما بدین روند بی اثر نباشد ، HTML را فراگرفتید یعنی میدانید که تیرآهن ، میلگرد ، سیمان ، خشت ، گچ و ... چه کاربردی دارا هستند ، با به کارگیری از CSS میلگرد ها را به اندازه های دلخواه در آوردید و همگی عنصرها را کنار هم چیدید و بالا رفتید ، دیوارها را رنگ زدید ، ظاهرا ساختمان رسیدید و نمای آن را قشنگ کردید و ... ساختمان شما زیباست البته درب و پنجره آن کامل شدن وجود ندارد درحال حاضر لازم میباشد (جاوا اسکریپت ) Javascript را نیز به ساختمان خویش وارد کنیم تا با استعمال از آن حالتی بوجود آید که زمانی دستگیره در را می چرخانید در گشوده شود ، به عبارت دیگر با به کار گیری از Javascript تمامی تعاملات بازدید کننده با وب سایت را رئیس خواهید کرد . از نمونه بیرون شویم ، در صورتیکه اعتنا کرده باشید در اسلاید ها زمانی روی کلید های اسلاید بعدی و قبل کلیک می‌کنید عکس گزینش گردیده نمایش داده میشود که‌این فعالیت با به کار گیری از جاوا اسکریپت پیاده سازی شده‌است یعنی برنامه نویسی به‌این فیس صورت گرفته که زمانی روی پیکان بعدی کلیک شد، عکس فعلی نهفته گردیده و عکس بعدی اکران داده شود .برای کسانی که تا کنون با هیچ لهجه برنامه نویسی ای شناخت نداشته اند ، ممکن میباشد یادگیری این گویش پاره ای پیچیده به لحاظ رسد البته کافیست به آن به دیده یک بازی نگاه نمائید و از برنامه نویسی لذت ببرید و به خیال و خاطر داشته باشید در بخش اعظمی مورد ها به بن بست می خورید و در حالتی‌که از بن بست رد گردید ، قادر خیس خواهید شد.بعد از جاوا اسکریپت نوبت به JQuery ( جی کوئری ) می‌رسد که کتابخانه ای میباشد که به لهجه Javascript درج شده و با به کارگیری از آن میتوانید شل خیس کد نویسی فرمایید و یادگیری آن ضروری میباشد ، JQuery از قواعدی پیروی مینماید که یادگیری آن بسیار بی آلایش میباشد و ضرورت یادگیری آن به‌این ادله میباشد که با به کار گیری از آن سرعت برنامه نویسی شما ارتقا می‌یابد و استعمال از افکت ها و برنامه خردسالان های پیشفرض جانور در آن پباده سازی های شمارا دیدنی خیس و زیباتر می نماید.برای راه‌اندازی یک وبسایت شما در دو سمت کد نویسی می‌کنید : سمت کلاینت ( بازدید کننده ) و سمت سرور . تا کنون شما با فرایند ساخت وب سایت در جهت کلاینت آشنا شدید ( HTML , CSS , Javascript , JQuery ) در مبحث بعدی با همین تیتر شمارا با برنامه نویسی سمت سرور آشنا خوا‌هیم کرد . امید‌وار‌یم مطالب روایت شده شما‌را در تعلیم هرچه بهتر و سریعتر طراحی وب سایت کمک کند .</description><category>بهنام</category><author>بهنام</author><pubDate>Wed, 13 Nov 2019 18:42:47 +0330</pubDate></item><item><title>به چه شکل یک برنامه نویس خوب باشیم؟</title><link>https://virgool.ir/@behnamadel20/به-چه-شکل-یک-برنامه-نویس-خوب-باشیم-qa04xj0fiyz1</link><description>در‌صورتی‌که حس میکنید در تایپ کردن یک برنامه گیر نموده اید، این نکته را در نظر بگیرید که یادگرفتن سنتی متداول، ممکن میباشد شمارا برای ورود به دنیای توسعه و گسترش اپلیکیشن و برنامه نویسی فراهم نکرده باشد. در‌این مقاله به بیان اینکه، چه‌گونه فراگیری، در تربیت و فراهم سازی اشخاص تحت عنوان یک توسعه دهنده شکست خورده میباشد، از زبان کن مازاکا، مدیریت ارشد فناوری داده ها و یکی بنیان گذاران پروژه فایرهاوس میپردازیم. وی میگوید:چه کسی میتواند برنامه نویس شود؟” از آن‌جا که برخلاف مرکزهای آکادمیک، باخت در دنیای برنامه نویسی خوب تلقی میگردد. بدین ترتیب هیچ گاه نمی توانید دنیای برنامه نویسی را کاملا درک نمائید، بدین ترتیب به جای تمرکز بر روی جزئییات ها، بر روی مفاهیم کلی متمرکز می‌شوید.”تحصیلات مرسوم فعلی، معمولا سبب میگردند در هنگام برنامه نویسی طولانی تر تقلا نمایید. ولی اینکه تقصیر را فقط از جانب تحصیلات آکادمیک و مدرسان بدانید، منصفانه نیست. ولی نسبتاً کلیه چیزهایی که آموخته اید، امروزه به مشقت به خاطر می‌آورید.در کل ی آکادمیک شما‌را به سمت یادگیری موضوعات گوناگون سوق میدهند، بعد سوای بکارگیری مواردی که معمولاً برای یادگیری مسئله مدنظر، نیاز میباشد، آزمون می دهید. امتحان در یک مورخ معین برگزار گردیده و شما باید پیش از آن مورخ، همگی اصول را بیاموزید. پیش از آزمون، استاد کلیه منابع ما یحتاج برای یادگیری، مشتمل بر تمامی چیزهایی را که در امتحان مطرح خواهد شد، در دست شما قرار می‌دهد. در‌صورتی‌که شما همگی اصول را تماما و به طور تئوری، خاطر بگیرید، نمره بدون نقص را اخذ می‌کنید. در‌صورتی‌که شما در آزمون، نمره پایینی بگیرید، معمولاً به جهت عدم سعی کافی یا این که فراهم نبودن برای آزمون، خواهد بود.در شرایطی‌که بعداز مورخ برگزاری آزمون، مورد ها و اصول کلی را خاطر بگیرید، اهمیتی نخواهد داشت. چنانچه شما در آزمون ناموفق ظواهر گردید، حتی در‌حالتی که یک روز پس از برگزاری آزمون، کاملا بر روی همگی اصول اشراف پیدا نمائید، باز هم هیچ تأثیری در نظارت شما نخواهد داشت. شما هنگامی که لازم بود، این اصول را نمی دانستید، براین اساس احتمالاً بدون چاره به گذراندن دوباره کلاس میباشید.این سیستم تا حدودی پاسخ می‌دهد. اکثر مردم بضاعت و توان خواندن، تایپ کردن و عملیات ریاضی معمولی مانند جبر را میاموزند. ولی یک اختلال وسیع موجود است. آنچه را انتظار دارید در مرکز ها آکادمیک بیاموزید با آنچه توسعه و گسترش دهندگان، در دنیای حقیقی به آن نیاز دارا‌هستند، مقایسه نمایید! متوجه می‌شوید که‌این دو طریق تماماً مخالف یکدیگرند. اکنون به بازنگری عوارض برخی از این تفاوت ها می‌پردازیم.فرض نمایید باخت چیز بدی میباشد و آمادگی نخستین میتواند از باخت دوری نماید. در‌این‌صورت‌، شما ممکن میباشد تصور کنید آمادگی نخستین قادر است از وقوع ایرادات، مشکلات و هر حادثه ناگواری در طول فعالیت، دوری نماید. البته در امر برنامه نویسی، دقیقا بر خلاف این خط مش حادثه می افتد.در واقع، ناکامی یک زمان میباشد.در زمان یادگیری کدنویسی، شما با بعضی پیام های اشتباه روبرو خواهید شد. حتی بعداز یادگیری کدنویسی، گشوده هم پیغام نادرست مشاهده خواهید کرد. شما بایستی فقط به تقویت یک مهارت بپردازید و روش خویش را گزینش فرمایید تا بتوانید به یک گسترش دهنده خودکفا تبدیل گردید.مواجهه با غلط در برنامه نویسیشما بایستی بتوانید هنگام مشاهده یک غلط، پیام اشتباه را خوانده، به باز نگری کد پرداخته و اختلال را رفع نمایید. این روال عاقلانه برای رفع ایراد میباشد. با این حالا، بعضا اشخاص با دیدن خطاهای کدنویسی، سرگرم عصبانیت یا این که غم می‌شوند و مجموعاَ رمانتیک عکس العمل می نمایند که صحیح وجود ندارد.روال شغل های کامپیوتری به این صورت میباشد که دنباله ای از راهبرد ها را مدنظر قرار داده و آنها‌را به همان صورت اجرا فرمائید. با اعتنا به تنظیمات مختص پوشه های کدنویسی گردیده، کامپیوتر یک نتیجه خاص را ایجاد میکند. در صورتی کد شما غلط داشته باشد، به‌این معناست که روال کدنویسی فعلی شما در همین لحظه دارنده اشکالات خاصی میباشد و خیر اضافه.وجود اشتباه در کد شما به این معنی وجود ندارد که شما برنامه نویس بدی میباشید.در اکثر موردها، چیزی به اسم برنامه فارغ از اشتباه نیست. وجود غلط در کد شما صرفا به‌این معناست که چیزی به صحت تنظیمات نشده میباشد. یا این که کدنویس بهتری نیستید، نخواهد بود، این صرفا بدان معناست که طرحی که نوشته اید، کاری که شما انتظار دارید، انجام نمی دهد. آنچه طولانی تر مبتدیان نمی دانند این میباشد که‌این فرمان، در واقع حادثه بهتری میباشد.هر باخت، فرصتی برای یادگیری میباشد.در حالتی‌که فکر‌می‌کنید‌ کد شما بایستی عمل نماید، و اینطور وجود ندارد، به این معناست که یک اختلاف کوچک (احتمالا بسیار کوچک) میان آنچه فکر می‌کنید کد شما انجام می‌دهد، و آنچه بایستی صورت بپذیرد، موجود است.با این حالا، درگیر شدن با خطاهایی که شما تا قبل از اینً با آن آشنا گردیده اید و به راحتی قابل حل میباشند، به پیشرفت شما تحت عنوان یک برنامه نویس یاری نخواهد کرد.بخش اعظمی از اشخاص خوب برد را می‌بینند. برای اینجانب برد با تکرار غلط و داخل بینی آن بدست میاید.در واقعیت برد نتیجه ها یک درصد فعالیت میباشد که خود از 99 در صد نادرست نتیجه ها شده‌است.اینجا جایی میباشد که یادگیری حقیقی و واقعی در برنامه نویسی اتفاق می افتد. در بین چگونگی تصور شما از تعبیر و تفسیر کد خود به وسیله کامپیوتر، و اینکه در حقیقت کامپیوتر به چه شکل کد شما‌را تعبیر و تفسیر میکند، اختلافات کوچکی موجود هست، که مسئله مهمی وجود ندارد. پیام نادرست در کامپیوتر، به شما می‌گوید که یک جای فعالیت نادرست میباشد. ولی نکته فوق العاده ای که موجود هست این میباشد که خویش کد نادرست، نکاتی را در زمینه‌ی نقص‌ ارائه میدهد. این نکات به شما امداد مینماید تا نقص‌ را شناسایی کرده و حتی ممکن میباشد در رفع نقص‌ به شما یاری دهد.در اصلً اشتباهات کدنویسی با بقیه ایرادات متعدد اندایرادات کدنویسی می‌توانند به طور بدون پول رفع شوند. البته در‌صورتی‌که یک ماشین را با دستور شکسته یا این که یک پل را با مصالح معیوب فکر کنید، قطعاً هزینه و زمانه متعددی برای رفع خطاهای احتمالی نیاز دارید. ولی در حالتی که در کدنویسی یک برنامه در گیر اشتباه گردید، می‌توانید اشتباهات را کشف کرده و بعداً به رفع آن بپردازید. این عمل، پیامدی شبیه نمونه های پیشین نخواهد داشت.این به‌این معناست که شما همان طور که برند زاکربرگ گفته میباشد، آزاد می‌باشید. “سریع تکان نمایید و تمامی چیز را بشکنید”.برای یادگیری طراحی وب و آموزش برنامه نویسی چه مراحلی را باید گذراند؟خطاهای برنامه نویسیاینجا این طور وجود ندارد که زمانه بیاید و بگذرد و شما در فهم و شعور بهتر مفاهیم گیر نمایید. در کدنویسی، یک پیام اشتباه بدین مضمون‌ میباشد که کامپیوتر به آسانی به شما بگوید: «دوست من، اینجانب فکر می‌کنم یک اختلاف کوچک دربین چیزی که شما فکر می‌کنید و چیزی که در واقع رخداد می افتد موجود است. در اینجا تعدادی نکته برای یاری به شما گوشزد میگردد».در مرکز ها سنتی می آموزید که تقلب کردن بد میباشد.بخش بزرگی از برنامه نویسی، یادگیری طرز تقلب کردن میباشد. برنامه نویسان بدین نحوه کار نمی‌کنند که یک جور نکات پررنگ را در ذهن خویش نگه دارا هستند و خل وچل وار آغاز به نوشتن نمایند.برنامه نویسی سریعدر ازای، آن‌ها با منفعت گیری از منابعی که مشتمل بر جواب سوالاتشان میباشد، مطالب را حافظه می‌گیرند. آن ها به کدی که تا قبل از اینً مندرج میباشد نگاه می نمایند. کدهای بقیه افراد را باز‌بینی مینمایند. در موتور جستجوی گوگل، به جست و جو میپردازند، مطالب بلاگ ها را مطالعه مینمایند و آنچه را آموخته اند، تثبیت می نمایند. به این ترتیب برنامه نویسان چیزی را به خیال نمی سپارند، فقط وقتی که نیاز به یاری دارا هستند، تقلب می نمایند.عامل قابل قبولی برای اینکه شغل ها شروع آپی، در تیم خویش میز پینگ پونگ و فوتبال دستی دارا هستند، موجود است. عامل این فرمان این میباشد که به جای نشستن و نوشتن کد برای یکسری ساعت در روز، منش های بهتری نیز برای حل ایرادات موجود هست.اطراف برنامه نویسیدلیلی برای تکثیر گسترده کتاب جعلی اُوریلی (O’Reilly)، به عنوان “راهنمای ضروری برای اسکن پیست کردن از وبسایت Stack Overflow”، موجود هست. آنچه این کتاب را گزینه دقت یوزرها قرار داده میباشد، حقایق متعددی میباشد که در تیتر آن پنهان میباشد. در برنامه نویسی، نیازی به اینکه همگی مطالب را پیش از آغاز فعالیت یا این که مواجهه با غلط بدانید، نخواهید داشت. فقط چیزی که بایستی خاطر بگیرید، بضاعت و توان کشف چاره میباشد.این بضاعت و توان شما‌را برای پذیرفتن یک شغل مهیا میکند. مدیر شما انتظار بی آلایش ای از شما خواهد داشت، اینکه در رشته خود، خاطر بگیرید و پرورش کنید.ما آموخته ایم که درک کردن اصول، مهم میباشد.در واقعیت اینطور وجود ندارد. در مجموع، بیش تر جزئیات مهم نیستند. به عنوان مثال، یک اتاق بدون نور و تاریک را فکر کنید، این اتاق مانند یک زمینه به طور کاملً نو، برای شما ناشناخته میباشد. هر نوری که درین اتاق ظواهر شود، به صورت شبیه، نشان دهندهدانش شما راجع‌به آن زمینه میباشد. در مرکزها آکادمیک احتمالاً آموخته اید که در صورتی شما یک سری اعمال را انجام دهید، اتاق مملو‌از روشنایی خواهد شد. همینطور احتمالاً یادگرفته اید که مهم‌ترین مهارت، یافتن شیوه لبریز کردن اتاق با نوروفروغ میباشد.البته روال فعالیت برنامه نویسان این چنین وجود ندارد. شما هیچ گاه کار کشته نخواهید بود اتاق را کاملا با فروغ و روشنایی پر‌نور فرمایید، و این عمل در واقع، مهارت مدنظر برای یک برنامه نویس وجود ندارد. درعوض، شما می بایست شیوه تکان در حوالی یک اتاق بدون‌نور را با به کارگیری از لامپ قوه بدانید تا بتوانید عمل مدنظر خویش را در اتاق انجام دهید. در واقع مهارتی که از شما انتظار می رود، تکان در اتاق بدون‌نور با نور و روشنایی محدود و ابزارهای فعلی در دسترستان میباشد.تکنولوژی های برنامه نویسی تازه همواره در اکنون ظهور می‌باشند. کامپیوتر و فناوری با سرعت بی نظیری در اکنون تغییر و تحول میباشد. یکی‌از فارغ التحصیلان برنامه فایرهاوس، در یکی جلسات اخیر آنان، حقیقت های پایین را بیان نموده است:مقالات برنامه نویسی چرخ نزدیک به 3000 سال قبلی از ولادت ابتکار شد.انقلاب صنعتی در میان سالهای 1760 تا 1840 (حدوداً 5000 هزار سال آن گاه) اتفاق افتادبرادران رایت اولی پرواز خود را در سال 1903 انجام دادند. (60 سال بعد از آن)شوروی در سال 1957(50 سال آن گاه)، ماهواره ای را به دور و اطراف ارسال کرد.نیل آرمسترانگ در سال 1969 (12 سال آنگاه) بر روی ماه فرود آمد.و برای بازگرداندن آپولو به زمین، کامپیوتر هدایت آپولو، توانست 41.6 راهبرد را در ثانیه پردازش نماید. یک آیفون 6، حدود 3.36 میلیارد راهبرد را در ثانیه پردازش میکند. این بدان معناست که فناوری که در جیب شماست، توان محاسباتی هدایت 120 میلیون موشک آپولو به ماه، در آن زمانه، یعنی در سال 1969 را دارااست.فناوری با سرعت زیاد در حالا پیشرفت میباشد؛ از نگاه فیزیکی، قابلیت یادگیری همگی چیز در‌این حوزه غیر ممکن میباشد.چیزهای متعددی برای یادگیری موجود هست، ولی روزگار کافی در روز برای یادگیری همه این محتوا نیست. براین اساس راجع به احاطه بر روی برخی چیزها، نگران نباشید. در ازای، بر روی مهارت یاددادن نحوه یادگیری، تمرکز نمائید. این مورد حقیقتاً مهم میباشد. حقیقت شی ها به مراتب معدود اهمیت خیس از فهم مهارت های مایحتاج برای گسترش آن ها میباشد.هنگامی شما یک خط مش برای حل ایرادات با زبان برنامه نویسی یا این که چارچوب ها را می آموزید، رویکرد های دیگر نیز بهتر، درک میشوند. براین اساس نگران به خیال و خاطر سپردن همهاصول نباشید. در قبال بر روی مفاهیم کلی تمرکز نمائید.در واقعیت، یاددادن نحوه یادگیری کدنویسی، بسیار مهم تر از خود کدهایی میباشد که می آموزید. به همین عامل میباشد که اکثری از مهندسان شغلی را میگیرند که از آن‌ها میخواهد تکنولوژی هایی را که تا به امروز به کار گیری نکرده اند،به همین عامل میباشد که مطالبات درخواستی از یک گسترش دهنده، با آنچه اکثر مردم فکر میکنند متعدد میباشد.وقتی که شما بضاعت فعالیت با ناشناخته ها را دارید، بر روی هنر برنامه نویسی مسلط می‌باشید.این پدیده بسیار شایع میباشد که چیزهایی که فکرمی کنیم “هیچ وقت حادثه نمی افتند”، گه گاه رخداد می‌افتند. هیچ کس با آغاز ایجاد یک میز، انتظار ندارد که در آخر به یک چوب بیس پر و بال رسد. ولی این اتفاقات در دنیای اپلیکیشن مدام حادثه می افتد. برای مثال، وب سایت فلیکر(Flickr)، تحت عنوان یک بازی فعالیت خود را مقدمه کرد و در غایت به یک وبسایت گسترده در زمینهاشتراک عکس تبدیل شد.این چیزی میباشد که برنامه نویسی را جالب، چالشی و مشغول کننده می‌کند. شما می‌توانید ناکامیباشید، تقلب نمایید و روی مفاهیم کلی که در فعالیت نیاز دارید، تمرکز فرمایید.این سه آیتم را به خیال و خاطر داشته باشید و چیزی که درخصوص یادگیری در مرکز ها آکادمیک آموخته اید، رها فرمایید. در‌حالتی که شما این عمل را انجام دهید، شما در مسیر تبدیل شدن به یک برنامه نویس عالی، قرار خواهید گرفت.</description><category>بهنام</category><author>بهنام</author><pubDate>Wed, 06 Nov 2019 15:11:23 +0330</pubDate></item><item><title>برنامه نویسی را از کجا یاد بگیریم؟</title><link>https://virgool.ir/@behnamadel20/برنامه-نویسی-را-از-کجا-یاد-بگیریم-mfveidemy1cl</link><description>ما در مورد منابعی که به برنامه نویسان و توسعه دهندگان کمک می کند مهارت های خود را بهبود بخشند ، زیاد صحبت می کنیم. امروز ما با جزئیات بیشتر در مورد منبعی صحبت می کنیم که به یک رمزگذار از ابتدا کمک می کند.برای یادگیری طراحی وب و آموزش برنامه نویسی چه مراحلی را باید گذراند؟ما به این سؤال نخواهیم پرداخت که چرا به هیچ وجه برنامه نویسی را مطالعه کنیم و اینکه آیا این امکان وجود دارد که خودت انجام دهی. این موضوع بارها و بارها مطرح شده است. ما بهتر خواهیم گفت که چگونه این کار را با استفاده از یک منبع تخصصی انجام دهید.از کجا شروع کنیمتصمیم گیری در مورد تصمیم به مطالعه برنامه نویسی و یافتن نقاط شروع برای شروع کمک به دوره &#34; اصول برنامه نویسی &#34;. هر شخصی می تواند آن را تصویب کند ، حتی کسی که در مدرسه هیچ درس علوم کامپیوتر نرفته است.نادرستمدرک MBA را در مدت 1 سال دریافت کنید!مدرک MBA را در مدت 1 سال دریافت کنید!مدرک MBA را در مدت 1 سال دریافت کنید!مدرک MBA را در مدت 1 سال دریافت کنید!دوره بسیار کوتاه است ، فقط دو هفته طول می کشد ، اما مؤثر است. آموزش های ویدئویی و مشق شب در آن وجود دارد. بعد از چند درس ، می توانید برنامه های کوتاه بنویسید و می دانید که آیا ادامه دهید یا خیر.چه چیزی در انتظار شما در این برنامه درسی است؟ مبانی الگوریتم ها ، تفاوت ها و ویژگی های زبان های برنامه نویسی ، مشخصات کار آینده ، تمرین تعیین اهداف - و بدون سلام ، جهانی! انجام نخواهد داداز آنجا که این دوره ، در واقع ، یک آزمون است ، پس می توانید آن را کاملا رایگان بگیرید. بدون ترفندنحوه انتخاب تخصصبرنامه نویسی یک صنعت با فرصت های فوق العاده برای گسترش مهارت ها و تولید مجدد است. هنگامی که اصول را یاد گرفتید ، وقت آن است که به مهارت های خاص تری بروید که با آن درآمد کسب خواهید کرد.جالب ترین ها برای مبتدیان خواهد بود. برای آنها ، این سرویس حداکثر فرصت های آموزش را فراهم می کند.آموزش شبیه به یک استاندارد دانشگاهی است. هر دوره دارای سخنرانی - فیلم های آموزشی است که از طریق آنها معلمان دانش را منتقل می کنند. مواد متدولوژیکی برای هر دانش آموز در دسترس است که به کمک آن کارهای خانه انجام می شود. این انجمن یک اتاق استعمال دخانیات است که در آن کاربران خدمات تجربه و تبادل نظر دارند و به دنبال پاسخ سوالات هستند.کارآموزی یادگیری با انجام است ، زیرا شما در حال کار روی یک پروژه واقعی هستید که فروخته می شود و مورد استفاده قرار می گیرد و نه برای یک کار تحصیلی. این عمل مهارت های بسیار مهمی را برای کارفرمایان فراهم می کند. این توانایی بدنام در کار در یک تیم ، توانایی درک وظیفه فنی و یافتن پاسخ به سؤالات دشوار است.شرایط کارآموزی برای همه شرکت ها متفاوت است ، بسیاری از آنها آماده دعوت از مبتدیان برای کار با پول واقعی هستند.چه کسی میتواند برنامه نویس شودچگونه سردتر شویمنکات حرفه ای و هک های مفید زندگی در یک وبلاگ جمع آوری می شود که اعضای جامعه GeekBrains ایده ها و دیدگاه های مشترکی با یکدیگر دارند.جنبه های مثبت خدمات آشکار است. شما در حال دسترسی به یک سرویس با دانش صفر هستید. شما درس می خوانید و تمرین می کنید. شما به عنوان یک متخصص آماده با دانش ، نمونه کارها و تماس های حرفه ای وارد بازار می شوید. شما همچنان به دانش و رشد خود ادامه می دهید.گرفتن چیست؟ فقط به این چیزی داده نمی شود GeekBrains یک سیستم جدی است که در آن شما باید یاد بگیرید و خود را مجبور به جذب اطلاعات جدید کنید. شاید شما از این واقعیت انگیزه بگیرید که بیش از 40،000 نفر قبلاً آموزش را از طریق این سرویس به پایان رسانده اند. این شاخص چیزهای زیادی می گوید.</description><category>بهنام</category><author>بهنام</author><pubDate>Mon, 04 Nov 2019 02:10:30 +0330</pubDate></item><item><title>نحوه یادگیری برنامه نویسی از ابتدا</title><link>https://virgool.ir/@behnamadel20/نحوه-یادگیری-برنامه-نویسی-از-ابتدا-bl7xowmmxupb</link><description>به یاد داشته باشید که بدون تمرین موفق نخواهید شد. در دوره های پروژه محور تحصیل کنید و سعی کنید خودتان برنامه ها و سایتهایی را که جدا از آنها جدا شده است بنویسید. به دنبال سخنرانی در YouTube با بحث در مورد پروژه هایی که می خواهید توسعه دهید. ابتدا کارهای دیگران را کپی کنید و آن را تحلیل کنید. سپس سعی کنید از اصلی فاصله بگیرید ، آزمایش کنید ، عناصر فردی را تغییر دهید تا بتوانید چیزی منحصر به فرد ایجاد کنید.علاوه بر دوره ها و سخنرانی های ویدئویی ، مستندات رسمی موجود در سایت ها و کتاب های زبان در خدمت شماست . وقتی اصول را به درستی بدست آورید ، به دنبال آخرین انتشارات با زیرنویس بهترین تمرینات برای زبان برنامه نویسی انتخاب شده خود باشید. چنین کتابهایی شامل بهترین تکنیک های توسعه هستند.مطمئن باشید برای ایجاد پروژه خود هدفی را تعیین می کنید و مرتباً روی آن کار می کنید.این به تکمیل دانش به دست آمده کمک می کند و می فهمید که هنوز چه اطلاعاتی را در دست ندارید. مهارت های شما به همراه پروژه توسعه می یابد. پس از اتمام کار ، روی پیچیده تر کار کنید.اگر در روند آموزش یا توسعه مشکل دارید ، همیشه می توانید برای هر سؤالی به هر جامعه از برنامه نویسان مانند &#34; توستر &#34; و &#34; Stack Overflow&#34; مراجعه کنید . به عنوان مثال ، آنها به شما کمک می کنند تا مشکلی را حل کنید ، یک مسیر خوب را انتخاب کنید یا به خطا در کد اشاره کنید.سرویس سؤالات و پاسخها در مورد موضوعات فناوری &#34;توستر&#34;راحت است مهارت های خود را در مکان های ویژه ای که می توانید با سایر برنامه نویسان به رقابت بپردازید ، حل کنید و مشکلات مختلف عملی را با استفاده از کد حل کنید. این خدمات شامل Codewars ، TopCoder و HackerRank می شوند .اگر احساس می کنید پیشرفت شما در بن بست است یا می خواهید یادگیری خود را سرعت بخشید ، گزینه های زیر را امتحان کنید.13 نکته برای کسانی که به طور مستقل برنامه نویسی را مطالعه می کنند2. با استفاده از یک مربیمربی - مربی شخصی که خطاها را نشان می دهد ، در مورد مشکلات پیش بینی می کند ، به تهیه یک دوره آموزشی کمک می کند. یک توصیه مفید دریافت شده در زمان مناسب می تواند مشکلات زیادی را برای شما به همراه داشته باشد و باعث صرفه جویی در وقت شما شود. بنابراین ، مربی به کسی آسیب نمی رساند.دریابید که آیا برنامه نویسی در میان دوستان شما وجود دارد یا خیر. ممکن است برخی از آنها بخواهند به شما کمک کنند. اگر چنین افرادی را نمی شناسید ، می توانید آنها را در انجمن های برنامه نویس جستجو کنید. به عنوان مثال ، در همان &#34;توستر&#34;. فقط خدمات مشاوره ارزان نیستند و بدون هیچ دلیل ، هیچ کس نمی خواهد وقت زیادی را برای غریبه ها بگذارد.3. در معلمان دوره های &#34;زنده&#34;دوره های از راه دور و رو در رو با معلمانی که برنامه نویسان را از ابتدا آموزش می دهند در سالهای اخیر بسیار محبوب شده است. در این قالب ، شما نیز باید کارهای زیادی برای انجام خود داشته باشید. اما شما درگیر یک برنامه تهیه شده حرفه ای خواهید بود و حل مسئله توسط یک فرد زنده بررسی می شود. از مضرات دوره ها می توان به هزینه بالای آموزش اشاره کرد.اگر ترجیح می دهید به صورت حضوری تحصیل کنید ، می توانید در مراکز آموزشی که برنامه نویسی را در جامعه شما آموزش می دهند جستجو کنید. متأسفانه ، چنین مؤسساتی اغلب فقط در شهرهای بزرگ وجود دارند. نمونه آن آکادمی رایانه ای STEP است که در چندین کشور شعبه دارد.4- در دانشگاهاگر زمان زیادی باقی مانده و مطمئن هستید که می خواهید زندگی را با برنامه نویسی متصل کنید ، می توانید در دانشگاه علوم کامپیوتر بخوانید. اما بخاطر داشته باشید که مؤسسات آموزشی سنتی از پیشرفت عقب مانده اند ، بنابراین مجبورید خودتان زبانهای برنامه نویسی مدرن و فن آوری های دیگر را یاد بگیرید.از طرف دیگر ، دانشگاه دانش بنیادی در مورد ریاضیات ، الگوریتم ها و زمینه های دیگر را ارائه می دهد که به شما در تبدیل شدن به یک برنامه نویس کلاس بالا کمک می کند. با گذشت سالها مطالعه سخت ، شما نوع صحیحی از تفکر را شکل خواهید داد ، به لطف آنها همه چیز را در پرواز در زمینه حرفه ای درک خواهید کرد.نحوه انتخاب یک جهت و زباندر صنعت فناوری اطلاعات حوزه های مختلفی وجود دارد که هر یک از آنها مجموعه های خاص خود را استفاده می کنند. ما جهت افزایش پیچیدگی جهت های اصلی را ذکر می کنیم:توسعه وب . زبانهای محبوب: JavaScript، PHP، Python، Ruby.توسعه تلفن همراه . زبانهای محبوب: Java، Swift.توسعه بازی ها و برنامه های رایانه های رومیزی . زبانهای محبوب: C ++، C #، Cداده های بزرگ ، یادگیری ماشین . زبانهای محبوب: Python، R، Scala.در هنگام انتخاب چه چیزی را باید جستجو کنیدبرای انتخاب صحیح جهت و به ویژه زبان ، فاکتورهای زیر را در نظر بگیرید: دشواری تسلط و میزان مواد آموزشی در وب ، ترجیحات شخصی شما (آنچه را که دقیقاً می خواهید توسعه دهید) و ارتباط آن با زبان در بازار کار.</description><category>بهنام</category><author>بهنام</author><pubDate>Mon, 04 Nov 2019 01:56:07 +0330</pubDate></item><item><title>سی شارپ</title><link>https://virgool.ir/@behnamadel20/سی-شارپ-w13eehszbupo</link><description>سی شارپ (به انگلیسی: #C)، زبانی شیءگرا و سطح بالا از خانوادهٔ زبان‌های چارچوب دات‌نت شرکت مایکروسافت است.زبان سی شارپ، یک زبان برنامه‌نویسی چند الگویی و منظم شده مدل‌های تابعی، امری، عمومی، شیءگرا و جز گرا و در بستر دات نت می‌باشد. این زبان توسط مایکروسافت و جزئی از دات نت به وجود آمد و بعداً استانداردهای ECMA و ISO را نیز دربر گرفت. سی شارپ یکی از ۴۴ زبان برنامه‌نویسی است که توسط زمان اجرای زبان مشترک از چارچوب دات‌نت پشتیبانی می‌شوند و در همه جا به وسیله مایکروسافت ویژوال استودیو شناخته می‌شود.زبان سی شارپ با قدرت و در عین حال سطح بالایی خود توانسته توجه بسیاری از برنامه نویسان را به خود جلب کند.این زبان برپایه سادگی، مدرن بودن، همه منظوره و شیءگرا بودن ساخته شد. آندرس هجلزبرگ، طراح زبان برنامه‌نویسی دلفی، سرپرستی تیم طراحان زبان سی شارپ را بر عهده داشت. این زبان دارای دستوری شیءگرا مشابه ++C است و به شدت از زبان‌های جاوا و دلفینیازمندمدرک تأثیر پذیرفته‌است. در ابتدا نام این زبان COOL بود که مخفف C like Object Oriented Language بود، هر چند در ژوئیه ۲۰۰۰، زمانی که مایکروسافت پروژه را عمومی اعلام کرد، اسم آن به سی شارپ تغییر پیدا کرد.اهداف طراحی زباناستاندارد ECMA این اهداف طراحی زبان را برای سی شارپ برآورده می‌سازد:سی شارپ یک زبان برنامه‌سازی ساده، مدرن، برای اهداف عمومی و شیءگرا است.به دلیل اهمیت داشتن موضوع نیرومندی و دوام و بهره‌وری برنامه‌نویس، زبان دارای چک‌کننده Strong Type، چک‌کننده مرزهای آرایه، تشخیص حالت‌هایی که یک متغیر مقداردهی اولیه نشده‌است، قابلیت انتقال کدها و Garbage Collection خودکار است.این زبان برای استفاده در اجزای توسعه نرم‌افزار برای دستیابی به مزایای سامانه‌های توزیعی در نظر گرفته شده‌است.قابلیت انتقال برنامه‌نویس بسیار مهم است، خصوصاً برای آن دسته از برنامه‌نویسانی که با زبان‌های C و C++ آشنا هستند.پشتیبانی از این زبان برای بین‌المللی شدن بسیار مهم است.زبان سی شارپ برای نوشتن برنامه‌ها برای سامانه‌های تعبیه شده و میزبان در نظر گرفته شده‌است، سیستم‌عامل‌های پیچیده بسیار بزرگ گرفته تا توابع اختصاصی بسیار کوچک.هر چند برنامه‌های نوشته شده با سی شارپ طوری هستند که از لحاظ حافظه و پردازنده مورد نیاز مقرون به صرفه باشند، ولی خود زبان از لحاظ اندازه و کارایی به خوبی زبان‌های C و اسمبلی نیست.محتویات۱تاریخچه۲ویژگی‌ها۳ساختمان داده (ساختار و ذخیره‌سازی داده)&lt;br/&gt;۳.۱رشته‌ها&lt;br/&gt;۴سامانه یکپارچه شده&lt;br/&gt;۴.۱انواع داده&lt;br/&gt;۴.۲Boxing و UnBoxing&lt;br/&gt;۵ویژگی‌های جدید در سی شارپ ۲٫۰&lt;br/&gt;۵.۱کلاسهای partial&lt;br/&gt;۵.۲Genericها&lt;br/&gt;۵.۳کلاس‌های static&lt;br/&gt;۶پرونده:Imag|بندانگشتی|وسط|slam&lt;br/&gt;۶.۱یک شکل جدید از تکرار کننده با استفاده از سازنده توابع&lt;br/&gt;۶.۲Delegateهای ناشناس&lt;br/&gt;۶.۳Delegate covariance and contravariance&lt;br/&gt;۶.۴اکسسورهای یک خاصیت(get و set) می‌توانند دارای سطح دسترسی متفاوتی باشند&lt;br/&gt;۶.۵نوع داده Nullable&lt;br/&gt;۶.۶Coalesce Operator&lt;br/&gt;۷ویژگی‌های جدید در سی شارپ ۳٫۰&lt;br/&gt;۷.۱معرفی لینک&lt;br/&gt;۷.۲مقدار دهی به اشیاء&lt;br/&gt;۷.۳مقدار دهی Collection&lt;br/&gt;۷.۴انواع داده‌ای بی‌نام&lt;br/&gt;۷.۵نتیجه نوع متغیر محلی&lt;br/&gt;۷.۶عبارات لامبدا&lt;br/&gt;۷.۷خواص خودکار&lt;br/&gt;۷.۸توابع بسط داده شده&lt;br/&gt;۷.۹توابع جزئی&lt;br/&gt;۸متغیرهای ضمنی محلی۹سازنده‌های پیشرفته۱۰عبارات جستجو (Query Expression)۱۱آرایه‌های نوع ضمنی۱۲پیش پردازنده۱۳توضیحات کد۱۴سامانه مستندسازی XML۱۵(CLR(Common Language Runtime۱۶برخی ویژگی‌های MSIL۱۷اشکالات&lt;br/&gt;۱۷.۱پلتفرم&lt;br/&gt;۱۸پیشرفت در آینده&lt;br/&gt;۱۸.۱پارامترهای نوع generic از نوع Covariant و contravariant&lt;br/&gt;۱۸.۲جستجوی عضو پویا&lt;br/&gt;۱۸.۳کلمه کلیدی اختیاری ref&lt;br/&gt;۱۸.۴آرگومان‌های نام گذاری شده و پارامترهای اختیاری&lt;br/&gt;۱۹کتابخانه‌ها۲۰مثال Hello world۲۱استانداردسازی۲۲کارایی۲۳پیاده‌سازی‌ها۲۴نام زبان۲۵کلمات اختصاری به کار رفته در این متن۲۶جستارهای وابسته۲۷منابع۲۸پیوند به بیرونتاریخچه[ویرایش]در سال ۱۹۹۹، شرکت سان اجازه استفاده از زبان برنامه‌نویسی جاوا را در اختیار مایکروسافت قرار داد تا در سیستم‌عامل خود از آن استفاده کند. جاوا در اصل به هیچ پلت فرم یا سیستم‌عاملی وابسته نبود، ولی مایکروسافت برخی از مفاد قرار داد را زیر پا گذاشت و قابلیت مستقل از سیستم‌عامل بودن جاوا را از آن برداشت. شرکت سان پرونده‌ای علیه مایکروسافت درست کرد و مایکروسافت مجبور شد تا زبان شیءگرای جدیدی با کامپایل جدید که به ++C شبیه بود را درست کند. در طول ساخت دات نت، کلاس‌های کتابخانه‌ای با زبان و کامپایلر SMC نوشته شدند. در سال ۱۹۹۹ آندرس هلزبرگ گروهی را برای طراحی زبانی جدید تشکیل داد که در آن زمان نامش Cool بود و همانند C بود با خواص شیءگرایی. مایکروسافت در نظر داشت اسم این زبان را تا آخر Cool قرار دهد، ولی به دلیل مناسب نبودن برای اهداف تجاری این کار را نکرد. در ارائه و معرفی رسمی چارچوب دات‌نت در PDC در سال ۲۰۰۰ این زبان به سی شارپ تغییر نام یافت و کتابخانه کلاس‌ها و runtime در ای‌اس‌پی‌دات‌نت به سی شارپ منتقل شدند. مدیر و سرپرست طراحان در مایکروسافت آندرس هلزبرگ بود که تجربه قبلی او در طراحی Framework و زبان‌های برنامه سازی++Borland، دلفی (شهر)، Turbo Pascal، ویژوال سی++ به آسانی در دستورالعمل‌های سی شارپ قابل رویت است و به همان خوبی در هسته CLR.ویژگی‌ها[ویرایش]برخی از تفاوت‌های زبان سی شارپ با C و ++C عبارتند از:هیچ تابع یا متغیر سراسری(Global) وجود ندارد، تمام متدها و اعضا بایستی در داخل کلاس‌ها تعریف شوند. این امر ممکن است، هر چند برای استفاده از متغیرها و توابع عمومی باید از متدها و متغیرها در کلاس‌های عمومی استفاده کرد.متغیرهای عمومی، بر خلاف C و ++C، نمی‌توانند بلاک‌های پیوستی را در بر بگیرند.سی شارپ دارای یک نوع داده بولی است (bool). برخی از عبارت‌ها مانند while و if که شرطی هستند، نیازمند یک عبارت نوع بولی هستند. همان‌طور که ++C نیز دارای نوع داده بولی است، این نوع داده به راحتی می‌تواند به یا از Integerها تبدیل شود، و عبارتی مانند (if(a نیازمند این امر است که a از یک نوع قابل تبدیل به bool یا اشاره گر باشد. کامپایلر سی شارپ برنامه‌نویس را در این شرایط مجبور به استفاده از عباراتی می‌کند که به درستی یک مقدار bool را برمی‌گردانند؛ بنابراین دستوری مانند (if(a = b باعث بروز خطا می‌شوند. (به جای = بایستی از == استفاده شود)در سی شارپ، اشاره گرهای به حافظه بایستی فقط در داخل بلوکهای unsafe استفاده شوند و برنامه در این حالت برای اجرا نیاز به اجازه از کاربر دارد. بیشتر دسترسی شی از طریق شی امن است که یا همیشه در حال اشاره به شی صحیح موجود است یا یک مقدار Null دارد. اشاره گری به شی به درد نخور یا بلاک حافظه رندم غیرممکن است. اشاره گر نا امن می‌تواند به نمونه‌ای از value-type، آرایه، رشته یا بلاکی که حافظه به آن داده شده‌است اشاره نماید. کدی که به عنوان نا امن علامت نخورده باشد، هنوز می‌تواند اشاره گرها را از سامانه بازیابی یا در آن ذخیره کند ولی نمی‌تواند مرجع جدیدی به آنها اختصاص دهد.حافظه ساماندهی شده نمی‌تواند صریحاً آزاد شود، ولی به‌طور خودکار به عنوان به درد نخور تلقی می‌شود. انتخاب آدرس‌های به درد نخور حافظه نفوذ ناپذیر است. هم چنین سی شارپ با استفاده از عبارات، پشتیبانی مستقیمی از پایان اجباری می‌کند (پشتیبانی از اصطلاح Resource Acquisition Is Initialization).وراثت چندگانه از کلاس‌ها در این زبان پشتیبانی نمی‌شود. البته یک کلاس امکان ارث بری از تعداد نامحدود واسط‌ها را دارد. پشتیبانی نکردن از وراثت چندگانه به دلیل اهداف معماری این زبان در CLI و برای جلوگیری از پیچیدگی است. در عوض می‌توان از اینترفیس‌های مختلف استفاده کرد. یعنی برای یک کلاس که احتمالاً فرزند کلاسی دیگر است (ارث برده) می‌توان چندین اینترفیس را پیاده‌سازی (Implement) نمود.سی شارپ بسیار typesafe تر از C++ است. تنها تبدیلات ضمنی مثل تبدیل نوع داده کوچکتر به بزرگتر یا تبدیل نوع مشتق شده به نوع پایه به‌طور پیش فرض و بدون خطا صورت می‌پذیرد. هیچ تبدیل ضمنی ای میانBooleanها و Integerها وجود ندارد و هر تبدیل user-defined بایستی به صراحت با یکی از کلمات explicit یا implicit نشانه گذاری شود. تبدیل b به a در حالتی که a یک Integer و b یک double باشد در زبان C++ مجاز است اما در سی شارپ به یک خطای زمان کامپایل منجر می‌شود (بایستی به صورت explicit تعریف شود)اعضای Enumeration در داخل محدوده شخصی خود قرار دارند.سی شارپ قابلیت syntactic sugar را برای توابع متداول، اکسسورها و ماجول‌های کسول شده در یک کلاس به صورت ویژگی‌ها قرار داده‌است.اکسسورها که خاصیت نیز گفته می‌شوند در زبان سی شارپ قادر به کنترل دسترسی اعضا و معتبرسازی داده‌ها هستند.تمام انواع بازتابی(Reflection) و بازیابی(Recovery) قابل استفاده‌است.در حال حاضر (۳ ژوئن ۲۰۰۸) دارای ۷۷ کلمه رزرو شده‌است.ساختمان داده (ساختار و ذخیره‌سازی داده)[ویرایش]این کامپایلر در مقابل C یا ++C دارای ساختار بسیار متفاوتی است که دانستن آن به برنامه‌نویس امکان نوشتن برنامه‌های بسیار بهینه را خواهد داد.رشته‌ها[ویرایش]در C یا ++C ساختار رشته به صورت ارایه‌ای از نوع char بود که امکان اضافه کردن به رشته را محدود می‌کرد به دلیل ثابت بودن طول در آغاز تعریف ولی در سی شارپ دو نوع متفاوت رشته وجود دارد؛ که یکی به صورت ارایه‌ای با طول ثابت ۲۵۶(در عمل ۲۵۵)موجوداست (به صورت پیش فرض) و در صورتی که با کمبود جا روبرو شود فضای جدید (بزرگتر) یافته و به ان انتقال می‌دهد؛ ولی در نوع دوم رشته‌ها از لیست پیوندی استفاده می‌شود.سامانه یکپارچه شده[ویرایش]سی شارپ دارای یک سامانه نوع یکپارچه‌است که به آن CTS می‌گویند. این بدان معناست که تمام انواع، شامل موارد اصلی مانند Integerها، مشتق شده از System.Object هستند. به عنوان مثال، هر نوع یک متد به نام ToString() را به ارث می‌برد. بخاطر کارایی، انواع اولیه (و انواع مقداری) به‌طور داخلی فضایی برای آنها بر روی پشته در نظر گرفته می‌شود.انواع داده[ویرایش]CTS داده‌ها را به دو نوع تقسیم می‌کند:نوع مقداری (Value Type)نوع مرجعی (Refrence Type)انواع داده‌ای توده ساده‌ای از داده می‌باشند. نمونه‌های انواع داده‌ای نه هویت مرجعی دارند و نه مفاهیم مقایسه مراجع را. برای مقایسه برابری یا عدم برابری انواع داده‌ای، خود مقدار داده‌ها را با یکدیگر مقایسه می‌کنیم مگر اینکه عملگرهای مشابه دوباره تعریف شده باشند. مقادیر داده‌های مرجعی همیشه یک مقدار پیش فرض دارند و همیشه می‌توانند ایجاد یا کپی شوند. یکی دیگر از محدودیت‌های انواع داده‌ای این ات که آنها نمی‌توانند از یکدیگر مشتق شوند (ولی می‌توانند اشتراکاتی داشته باشند) و هم چنین نمی‌توانند در سازنده مقدار دهی اولیه شوند. مثالی از انواع داده‌ای، بعضی از انواع اولیه مانند int و float و char و System.DateTime می‌باشند. در مقابل، انواع مرجعی مفهوم تعریف مرجعی را دارند (که در آن هر نمونه از نوع مرجع، به‌طور ذاتی از دیگر نمونه‌ها جدا می‌شود، حتی اگر داده هر دو نمونه یکی باشد). این دقیقاً نمونه مشابه مقایسه تساوی یا عدم تساوی داده‌های مرجعی است، که در آن آزمایش برای مرجع‌ها از داده‌ای‌ها سریع تر است. در کل نه همیشه امکان تعریف نمونه مرجعی وجود دارد و نه امکان کپی یا نمایش مقادیر مقایسه دو نمونه؛ ولی به هر حال انواع مرجعی خاص می‌توانند این اعمال را از طریق سازنده‌های عمومی یا اجرای واسط‌های مشابه (مثل ICloneable یا IComparable) انجام دهند. نمونه‌هایی از انواع مرجعی، اشیاء، System.String و Sysmet.Array می‌باشند. هر دو نوع داده قابلیت انعطاف توسط تعریف به وسیله کاربر را دارند. در واقع وقتی ما نوع داده‌ای را به تابع ای ارسال می‌کنیم، آدرس داده نیز فرستاده می‌شود. البته این امر پیش فرض است ولی برای داده‌های مثل آرایه، رشته‌ای، آدرس فرستاده می‌شود و ارسال از نوع مرجع می‌شودBoxing و UnBoxing[ویرایش]Boxing عمل تبدیل مقدار نوع داده‌ای به نوع مرجع مشابه آن می‌باشد.متال:int foo = 42;// Value type...&#xA;object bar = foo;// foo is boxed to bar.UnBoxing عمل تبدیل نوع مرجع به نوع داده‌ای می‌باشد. مثال:int foo = 42;// Value type.&#xA;object bar = foo;// foo is boxed to bar.&#xA;int foo2 = (int)bar;// Unboxed back to value type.سی شارپ به برنامه‌نویس با استفاده از کلمه کلیدی Struct اجازه می‌دهد تا انواع مقداری User-defined را ایجاد کند. از دیدگاه برنامه‌نویسی، آنها کلاس‌های سبک‌وزن به نظر می‌رسند. برخلاف کلاس‌ها (که بر روی heap قرار می‌گیرند) و شبیه به انواع اولیه استاندارد مانند انواع مقداری Structها نیز بر روی پشته قرار می‌گیرند. آنها همچنین می‌توانند قسمتی از یک شئ باشند، یا در یک آرایه مرتب شوند، بدون حافظه غیر مستقیمی که به‌طور معمول برای انواع کلاس تخصیص می‌یابد.ویژگی‌های جدید در سی شارپ ۲٫۰[ویرایش]ویژگی‌های جدید در سی شارپ چارچوب دات‌نت SDK ۲٫۰ (مطابق با سومین ویرایش استاندارد ECMA-۳۳۴):کلاسهای partial[ویرایش]کلاس‌های Partial اجازه اجرای کلاس‌ها از بیش از یک سورس فایل را می‌دهند. این امر اجازه می‌دهد تا کلاس‌های بسیار بزرگ را قطعه قطعه کنیم و همچنین برای زمانی که برخی قسمت‌های یک کلاس به‌طور خودکار تولید می‌شوند مفید است.file1.cs:public partial class MyClass&#xA;{&#xA;    public MyClass()&#xA;    {&#xA;// implementation&#xA;    }&#xA;}file2.cs:public partial class MyClass&#xA;{&#xA;    public void SomeMethod()&#xA;    {&#xA;// implementation&#xA;    }&#xA;}Genericها[ویرایش]genericها یا نوع‌های پارامتری شده یا چندریختی‌های پارامتری یک ویژگی جدید چارچوب دات‌نت ۲٫۰ است که به وسیله سی شارپ پشتیبانی می‌شود. برخلاف Templateهای سی پلاس پلاس، در این انواع به جای اینکه نمونه سازی توسط کامپایلر انجام شود، در زمان اجرا صورت می‌گیرد، بنابراین می‌توانند چند زبانه باشند در حالی که ++C نمی‌تواند. آنها دارای ویژگی‌هایی هستند که به‌طور مستقیم توسطTemplateهای C++ پشتیبانی نمی‌شوند مانند نوع محدودیت‌ها در پارامترهای Generic با استفاده از رابط‌ها(Interface). سی شارپ از پارامترهای‌های Generic بدون نوع پشتیبانی نمی‌کند. بر خلاف genericهای جاوا،genericهای دات نت برای پارامتری کردن انواع داده‌ای در اشیاء ماشین مجازی CLI، از مفاهیم شیءگرایی استفاده می‌کنند که اجازه بهینه‌سازی و حفاظت انواع اطلاعات را می‌دهد.کلاس‌های static[ویرایش]کلاس‌ها به صورت Static قابل تعریف نیستند مگر اینکه تمام اعضای آنها Static باشند؛ که این امر بسیار شبیه به مفهوم مدل در زبانهای رویه‌ای است. (زبان رویه‌ای: یک زبان برنامه‌نویسی که در آن عنصر اصلی برنامه‌نویسی یک زیربرنامه‌است. مانند زبانهای C، پاسکال و…)پرونده:Imag|بندانگشتی|وسط|slam[ویرایش]یک شکل جدید از تکرار کننده با استفاده از سازنده توابع[ویرایش]یک شکل جدید از iterator(تکرار کننده)، با استفاده از ساختار yield return بسیار شبیه به yield زبان Python.// Method that takes an iterable input (possibly an array) and returns all even numbers.&#xA;public static IEnumerable&lt;int&gt; GetEven(IEnumerable&lt;int&gt; numbers)&#xA;{&#xA;    foreach (int i in numbers)&#xA;    {&#xA;        if (i % 2 == 0) yield return i;&#xA;    }&#xA;}Delegateهای ناشناس[ویرایش]Delegate یک شی می‌باشد که حاوی یک یا چند اشاره گر به توابع می‌باشد؛ که با Invoke کردن آن تمامی توابع اشاره شده داخل آن اجرا می‌شوند.Delegateهای ناشناس که عملکردهای محدودی را در سی شارپ به وجود می‌آورند. کد کنار بدنه Deletage ناشناس، دسترسی کامل برای خواندن یا نوشتن در متغیرهای عمومی، پارامترهای توابع و اعضای کلاسهای دارای محدوده Deletage را دارد ولی پارامترهای out و ref را پشتیبانی نمی‌کند. برای مثال:int SumOfArrayElements(int[] array)&#xA;{&#xA;    int sum = 0;&#xA;    Array.ForEach(       array,&#xA;        delegate(int x)&#xA;        {&#xA;            sum += x;&#xA;        }&#xA;  );&#xA;    return sum;&#xA;}Delegate covariance and contravariance[ویرایش]تبدیل گروه‌های متد به نوع Deletage در برگشت دارای covariant و در انواع پارامترها دارای contravariant هستند.اکسسورهای یک خاصیت(get و set) می‌توانند دارای سطح دسترسی متفاوتی باشند[ویرایش]مثال:string status = string.Empty;&#xA;&#xA;public string Status&#xA;{&#xA;    get { return status; }// anyone can get value of this property,&#xA;    protected set { status = value; }// but only derived classes can change it&#xA;}نکته مهم: سطح دسترسی خاصیت نمی‌تواند بالاتر از سطح دسترسی اکسسورها باشد. به عنوان مثال private بودن خاصیت و public بودن اکسسور باعث بروز خطا می‌شود.نوع داده Nullable[ویرایش]نوع داده Nullable (که با یک علامت سؤال قابل تشخیص است: int? i = null;)اجازه تخصیص مقدار null را برای انواع داده‌ای می‌دهد. این امر باعث بهبودی فعل و انفعال با پایگاه داده SQL می‌شود. در این حالت نوع ستونی INTEGER NULL در SQL به‌طور مستقیم به int? در سی شارپ تبدیل می‌شود.داده‌های Nullable در آخرین لحظات اوت ۲۰۰۵ اضافه شدند چند هفته مانده به اتمام کار اداری و برای بهبود زبان. متغیر Null در حقیقت خالی نیست، بلکه نمونه‌ای است از struct Nullable&lt;T&gt; با ویژگی HasValue مساوی false. وقتی در برنامه قرار می‌گیرد، خود به خود نمونه خالی در آن قرار می‌گیرد، نه مقدار خود آن، در نتیجه اشاره گر مقصد همیشه غیر Null می‌باشد، حتی برای مقادیر Null. کد زیر نضص بالا را مشخص می‌کند:int? i = null;&#xA;object o = i;&#xA;if (o == null)&#xA;    Console.WriteLine(&#34;Correct behaviour - runtime version from September 2005 or later&#34;);&#xA;else&#xA;    Console.WriteLine(&#34;Incorrect behaviour - pre-release runtime (from before September 2005)»);وقتی درون شی ای کپی می‌شود، نمونه Nullable به صورت تشریفاتی در آن قرار می‌گیرد و در نتیجه مقادیر و منابع Null با هم برابر می‌شوند. در گذشته این خاصیت دارای مجادله بود تا زمانی که علاوه بر چارچوب دات‌نت ۲، به هسته CLR نیز مجهز شد و همه تکنولوژی‌ها نظیر سی شارپ، ویژوال بیسیک، مایکروسافت اس‌کیوال سرور ۲۰۰۵ و مایکروسافت ویژوال استودیو ۲۰۰۵ را شامل شد.Coalesce Operator[ویرایش]مقدار اولین عملوندی که null نباشد را برمی‌گرداند. (یا null، برای زمانی که تمام عملوندها null باشند)object nullObj = null;&#xA;object obj = new Object();&#xA;return nullObj ?? obj;// returns objکاربرد اصلی این عملگر در قرار دادن یک مقدار nullable در یک مقدار non-nullable با استفاده از یک دستورالعمل ساده‌است.int? i = null;&#xA;int j = i ?? 0; /* Unless i is null, initialize j to i. Else (if i is null), initialize j to 0. */ویژگی‌های جدید در سی شارپ ۳٫۰[ویرایش]این ورژن در تاریخ ۱۹ نوامبر سال ۲۰۰۷ به عنوان بخشی از چارچوب دات‌نت ۳٫۵ عرضه شد؛ که شامل ویژگی‌های جدید الهام شده از زبان‌های برنامه‌نویسی اصلی (Functional) مانند Haskell و ML، و الگوی LINQ برای CLR است. در حال حاضر توسط هیچ موسسه استانداردسازی تأیید نشده‌است.معرفی لینک[ویرایش]نوشتار اصلی: لینک (زبان برنامه‌نویسی)لینک (به انگلیسی: Language Integrated Query)(مخفف انگلیسی: LINQ) یک زبان پرس و جوی قابل انعطاف و همه منظوره برای بسیاری از انواع منبع داده‌ها است (مثل انتخاب اشیاء شناور، سندهای XML، بانک‌های اطلاعاتی و…) که در ویژگی‌های سی شارپ ۳ جمع شده‌اند. سینتکس زبان به زحمت از SQL گرفته شده‌است، برای مثال:int[] array = { 1, 5, 2, 10, 7 };&#xA;&#xA;// Select squares of all odd numbers in the array sorted in descending order&#xA;IEnumerable&lt;int&gt; query = from x in array&#xA;                         where x % 2 == 1&#xA;                         orderby x descending&#xA;                         select x * x;مقدار دهی به اشیاء[ویرایش]Customer c = new Customer(); c.Name = &#34;James&#34;عبارت بالا می‌تواند به صورت زیر نوشته شود:Customer c = new Customer { Name=&#34;James&#34; };مقدار دهی Collection[ویرایش]MyList list = new MyList();&#xA;list.Add(1);&#xA;list.Add(2);عبارت بالا می‌تواند به صورت زیر نوشته شود:MyList list = new MyList { 1, 2 };فرض کنید که اجزای MyList و System.Collections.IEnumerable دارای متد عمومی Add هستند.انواع داده‌ای بی‌نام[ویرایش]var x = new { FirstName=&#34;James&#34;, LastName=&#34;Frank&#34; };سی شارپ ۲٫۰ توابع بی‌نام را معرفی کرد. سی شارپ ۳٫۰ هم انواع بی‌نام را معرفی می‌کند. با استفاده از این ویژگی برنامه نویسان قادر خواهند بود به صورت Inline انواع دلخواه خود را ایجاد کنند. به نمونه زیر توجه کنید:static void Main(string[] args)&#xA;{&#xA;    var anonymousType = new { Name = string.Empty, Age = 0 };&#xA;}کد ارائه شده، یک نوع بی‌نام را تعریف می‌کند که از طریق متغیر ضمنی محلی به نام anonymousType در اختیار قرار می‌گیرد.چرا Anonymous types؟ انواع بی‌نام بهترین گزینه برای تولید Entity Typeها می‌باشند. همان‌طور که گفته شد Entity Typeها فقط حاوی داده‌ها هستند؛ بنابراین به بهترین نحو می‌توان داده‌های دریافت شده از کاربر را در انواع بی‌نام بسته‌بندی کرد.نتیجه نوع متغیر محلی[ویرایش]var x = new Dictionary&lt;string, List&lt;float&gt;&gt;();کد بالا با کد زیر قابل تعویض می‌باشد:Dictionary&lt;string, List&lt;float&gt;&gt; x = new Dictionary&lt;string, List&lt;float&gt;&gt;();این ویژگی تنها یک ntactic sugarراحت برای کوتاه‌تر بیان کردن متغیرهای محلی نمی‌باشد، بلکه برای تعریف متغیرهای بی‌نام لازم نیز است.عبارات لامبدا[ویرایش]عبارات لامبدا یک راه کوتاه برای نوشتن مقادیر توابع بی‌نام کلاس اول را فراهم می‌کنند. دو مثال زیر را در نظر بگیرید:listOfFoo.Where(delegate(Foo x) { return x.Size&gt; 10; })listOfFoo.Where(x =&gt; x.Size&gt; 10);در مثال‌های فوق، عبارات لامبدا صرفاً یک نوع سینتکس برای delegateهای بی‌نام با مقادیر دارای بازگشت هستند. هر چند با توجه به نوع متن استفاده می‌شوند، کامپایلر سی شارپ می‌تواند لامبداها را به ASTها نیز تبدیل کند تا بعداً در زمان اجرا نیز بتوانند پردازش شوند. در مثال فوق، اگر listOfFoo یک مجموعه ساده داخل حافظه نباشد، ولی یک پوشه در اطراف جدول بانک اطلاعاتی می‌باشد. این تکنیک می‌تواند برای بهینه کردن اجرا، برای ترجمه بدنه لامبدا به عبارت معادل آن در SQL استفاده شود. در هر یک از دو راه فوق، خود عبارت لامبدا دقیقاً شبیه کد به نظر می‌رسد، بنابراین روش استفاده در زمان اجرا، برای کاربر ناپیدا می‌باشد.یکی از ویژگی‌هایی که سی شارپ ۲٫۰ ارائه کرد، توانایی تعریف توابع به صورت Inline بود که این ویژگی با عنوان توابع بی‌نام (anonymous methods) شناخته می‌شود. توابع بی‌نام در پاره‌ای مواقع بسیار مفیدند. اما نحو(syntax) به‌کارگیری آنها دشوار می‌باشد. عبارات لامبدا ویژگی توابع بی‌نام را دارند اما با نحو ساده‌تری در سی شارپ ۳٫۰ معرفی شده‌اند. به نمونه زیر توجه کنید:static void Main(string[] args)&#xA;{&#xA;   (int x) =&gt; x + 1;// explicitly typed parameter&#xA;   (y, z) =&gt; y * z;// implicitly typed parameter&#xA;}تعریف عبارات لامبدا از نحو (syntax) خاصی پیرو می‌کند. همان‌طور که در کد بالا مشاهده می‌کنید، پارامترهای تابع هم به صورت صریح و هم به صورت ضمنی قابل بیان اند. کلمه return به صورت ضمنی حذف شده‌است. تابع معادل عبارت لامبدای اول به صورت زیر است:int Fn(int x)&#xA;{&#xA;    return x+1;&#xA;}لیست پارامترها و بدنه عبارت لامبدا توسط =&gt; از هم جدا می‌شوند. در صورتی که تعریف عبارت لامبدا بیشتر از یک خط کد باشد می‌توان بدنه آن را با استفاده از {} نشان داد.static void Main(string[] args)&#xA;{&#xA;    (int x) =&gt; { x + 1; return x * x; };&#xA;}خواص خودکار[ویرایش]کامپایلر به‌طور خودکار یک متغیر نمونه خصوصی و قرار دهنده و قرار گیرنده مناسب تولید می‌کند، مانند:public string Name { get; private set; }توابع بسط داده شده[ویرایش]توابع بسط داده شده حالتی از سینتکس Suger هستند که امکان اضافه کردن متد جدید به کلاس موجود را بیرون از حوزه تعریف آن فراهم می‌کنند. در این مثال، تابع بسط داده شده یک تابع ایستا است که قابل فراخوانی توسط تابع مشابه می‌باشد. گیرنده فراخوانی مقید به اولین پارامتر تابع تحت عنوان this می‌باشد:public static class StringExtensions&#xA;{&#xA;    public static string Left(this string s, int n)&#xA;    {&#xA;        return s.Substring(0, n);&#xA;    }&#xA;}&#xA;&#xA;string s = &#34;foo&#34;&#xA;s.Left(3);// same as StringExtensions.Left(s, 3);زبان سی شارپ کلمه کلیدی sealed را برای این منظور ارائه کرد که امکان ارث بری از یک کلاس را صلب کند. یعنی با اضافه شدن این کلمه کلیدی به ابتدای تعریف کلاس، امکان ارث بری از آن غیرممکن می‌شود. سی شارپ ۳٫۰ ویژگی جدیدی را در اختیار برنامه نویسان قرار می‌دهد به این صورت که می‌توان هر نوع کلاسی حتی کلاس‌های مهر شده با Sealed را با استفاده از Extension methodsبسط داد.توابع جزئی[ویرایش]توابع جزئی به تولیدکننده‌های کد اجازه تولید اعلان توابع به صورت نقاط گسترش یافته‌ای که تنها شامل کدهای اصلی هستند را می‌دهد، در صورتی که یک نفر آن را در قسمتی از کلاسی دیگر اجرا کند.متغیرهای ضمنی محلی[ویرایش]سی شارپ ۳٫۰ کلمه کلیدی جدید var را معرفی می‌کند که به کمک آن برنامه نویسان قادر خواهند بود متغیرهای محلی خود را بدون ذکر صریح نوع آن‌ها، تعریف کنند.namespace CS3_Test&#xA;{&#xA;    class Program&#xA;    {&#xA;        static void Main(string[] args)&#xA;        {&#xA;            var string_value = &#34;Hello C# 3.0&#34;&#xA;            var int_value = 3;&#xA;        }&#xA;    }&#xA; }یکی از ویژگی‌های اصلی زبان سی شارپ،Strong Type بودن آن است. Strong Type بودن زبان به این معناست که با اعلان یک متغیر، نوع آن صریحاً باید توسط برنامه‌نویس مشخص شود. آیا اضافه شدن این ویژگی جدید، منافاتی با Strong Type بودن این زبان دارد؟ در پاسخ باید گفت که تعریف متغیرهای محلی به صورت ضمنی با استفاده از کلمه کلیدی var هیچ گونه منافاتی با Strong Type بودن سی شارپ ندارد. چون برنامه‌نویس می‌بایست نوع متغیر را به هنگام اعلان آن صریحاً مشخص کند. نوع متغیر پس از اولین اعلان تا اتمام حوزه تعریف آن تغییر نخواهد کرد و هر گونه تلاش برای تغییر نوع با خطا مواجه خواهد شد؛ بنابراین دو اعلان زیر نامعبر هستند:namespace CS3_Test&#xA;{&#xA;    class Program&#xA;    {&#xA;        static void Main(string[] args)&#xA;        {&#xA;            var string_value;// Error: Implicitly typed locals must be inintialized&#xA;            var int_value = null; /* Error: Cannot assign &#39;&lt;null&gt;&#39; to an implicitly typed local */&#xA;        }&#xA;    }&#xA;}استفاده از var تنها در تعریف متغیرهای محلی امکانپذیر است. در اعلان متغیرها به صورت سراسری، پارامترهای توابع و مقادیر بازگشتی نمی‌توان از var استفاده کرد. چرا var؟ این ویژگی آزادی عملی بیشتری برای کار با متغیرهای محلی در اختیار برنامه‌نویس قرار می‌دهد. سناریویی را در نظر بگیرید که یک تابع تحت شرایطی، مقادیر از انواع مختلف را برگرداند. در این صورت بدون درگیر شدن با casting و تبدیل نوع می‌توان با تعریف متغیر ضمنی محلی هر نوعی را که تابع برمی‌گرداند، در اختیار داشت.سازنده‌های پیشرفته[ویرایش]ماهیت تمامی برنامه‌های امروزی به گونه‌ای‌ست که با حجم عظیمی از داده‌ها سرو کار دارند. برای مدیریت داده‌ها، نیاز به کلاس‌هایی‌ست که در مهندسی نرم‌افزار آنها را Entity Types می‌نامیم. این کلاس‌ها به عنوان بسته‌هایی از داده‌ها محسوب می‌شوند. معضل فعلی موجود در رابطه با Entity Typeها تعدد سازنده‌های آن‌ها می‌باشد و ممکن است شما نیز با این مشکل برخورد کرده باشید. به این صورت که در سناریوهای مختلف، برنامه‌نویسان مجبور هستند سازنده یک کلاس را به چند شکل سربارگذاری کنند. سی شارپ ۳٫۰ راه چاره‌ای فوق‌العاده برای این مشکل ارائه می‌دهد. Object initializer حالت پیشرفته‌ای از سازنده می‌باشد.class Person&#xA;{&#xA;    private string firstname;&#xA;&#xA;    public string FirstName&#xA;    {&#xA;        get { return firstname; }&#xA;        set { firstname = value; }&#xA;    }&#xA;&#xA;    private string lastname;&#xA;&#xA;    public string LastName&#xA;    {&#xA;        get { return lastname; }&#xA;        set { lastname = value; }&#xA;    }&#xA;&#xA;    private int age;&#xA;&#xA;    public int Age&#xA;    {&#xA;        get { return age; }&#xA;        set { age = value; }&#xA;    }&#xA;}این کلاس شامل سه متغیر بوده و برای هر متغیر خاصیتی تعریف شده‌است. اینک این سوالات مطرح می‌شوند: سازنده این کلاس را به چند شکل باید سربارگذاری کرد؟ سازنده‌ای که هر سه متغیر را مقداردهی کند؟ شاید در مواردی هر سه متغیر در دست نباشد در این صورت چه سازنده‌ای باید فراخوانی شود؟ سی شارپ ۳٫۰ راه حل زیر را ارائه می‌دهد. فرض کنید بخوانیم نمونه‌ای از کلاس Person را ایجاد کنیم. همان‌طور که مشاهده می‌کنید، در سی شارپ ۳٫۰ به هنگام نمونه سازی، این امکان در اختیار برنامه‌نویس قرار می‌گیرد که هر یک از خصیصه‌های موجود در کلاس را به دلخواه و بنا به نیاز مقدار دهی کند به صورت زیر:Person person = new Person&#xA;(    Age = 21,&#xA;    FirstName = &#34;James&#34;,&#xA;    LastName = &#34;Frank&#34;);عبارات جستجو (Query Expression)[ویرایش]تیم طراح سی شارپ ویژگی فوق‌العاده‌ای را به آن اضافه کرد که برنامه نویسان را قادر می‌سازد نحو (Syntax) زبان‌های پرس و جو مانند SQL و XQuery را با استفاده از این زبان پیاده‌سازی کنند. این ویژگی با نام اختصاری LINQ شناخته می‌شود و دارای انواع زیر است:LINQ-to-Objects - talks to in-memory objectsLINQ-to-SQL - talks to SQL Server databasesLINQ-to-XML - talks to hierarchical data represented in XMLLINQ-to-DataSets - talks to DataSet objects and underlying DataTables with their relationshipsLINQ-to-Entities - talks to &#34;entities&#34;, part of ADO.NET ۳٫۰نمونه‌ای از کاربرد LINQ به صورت زیر است:static void Main(string[] args)&#xA;{&#xA;    var int_array = new int[] { 1, 2, 7, 9, 12 };&#xA;&#xA;    var selective_array = from c in int_array where c&gt; 5 select c;&#xA;&#xA;    foreach (var selected in selective_array)&#xA;    {&#xA;        Console.WriteLine(selected);&#xA;    }&#xA;}توضیح: در مثال بالا ابتدا یک آرایهٔ int با مقداردهی اولیه تعریف شده‌است. سپس با استفاده از دستورها) LINQ که جز کلمات کلیدی سی شارپ محسوب می‌شوند)، آرایه‌ای با اعضای بزرگتر از ۵ انتخاب و در متغیر ضمنی محلی selective_array ذخیره می‌شود. در نهایت اعضای selective_array به صورت ۷ و ۹ و ۱۲ خواهد بود. در توضیح این ویژگی جدید به همین یک مثال بسنده می‌کنیم چون بیان تمامی جنبه‌های LINQ خود نیازمند نگارش مقاله‌ای مفصل می‌باشد.آرایه‌های نوع ضمنی[ویرایش]آرایه‌ها را نیز می‌توان با استفاده از کلمه کلیدی var تعریف کرد.static void Main(string[] args)&#xA;{&#xA;    var a = new[] { 1, 10, 100, 1000 };// int[]&#xA;    var b = new[] { 1, &#34;one&#34;, 2 };// Error&#xA;}پیش پردازنده[ویرایش]ویژگی «دستورها پیش پردازنده» سی شارپ (اگرچه آنها به واقع یک پیش پردازنده نیستند) مبنی بر دستورها پیش پردازنده C است که به برنامه‌نویس اجازه تعریف سمبلهایی را می‌دهند. برخی از این دستورها عبارتند از: #if، #region، #define. راهنماهایی نظیر #region تذکراتی به ویرایش‌گرها برای code folding می‌دهند.توضیحات کد[ویرایش]توضیحات تک خط با استفاده از دو اسلش تعریف می‌شوند(//) و توضیحات چند خطی با /* شروع و به */ ختم می‌شوند.public class Foo&#xA;{&#xA;// a comment&#xA;    public static void Bar(int firstParam) {}//Also a comment&#xA;}&#xA;&#xA;public class FooBar&#xA;{&#xA;    /* a comment */&#xA;    public static void BarFoo(int firstParam) {}  /* Also a comment */توضیحات چند خطی هم چنین می‌توانند با /* شروع و با */ تمام شوند.public class Foo&#xA;{&#xA;    /* A Multi-Line&#xA;       comment  */&#xA;    public static void Bar(int firstParam) {}&#xA;}سامانه مستندسازی XML[ویرایش]سامانه مستندسازی سی شارپ بسیار شبیه به جاوا است، اما مبنی بر XML. دو شیوه مستندسازی در حال حاضر به وسیله کامپایلر سی شارپ پشتیبانی می‌شود.توضیحات تک خطی، که معمولاً در تولیدکننده کد Visual Studioپیدا می‌شوند، با استفاده از/// شروع می‌شوند.public class Foo&#xA;{&#xA;/// &lt;summary&gt;A summary of the method.&lt;/summary&gt;&#xA;/// &lt;param name=&#34;firstParam&#34;&gt;A description of the parameter.&lt;/param&gt;&#xA;/// &lt;remarks&gt;Remarks about the method.&lt;/remarks&gt;&#xA;    public static void Bar(int firstParam) {}&#xA;}توضیحات چند خطی، که در نسخه ۱٫۰ تعریف شدند، اما در نسخه ۱٫۱ پشتیبانی از آنها وجود نداشت با /* شروع و به */ ختم می‌شوند:public class Foo&#xA;{&#xA;    /** &lt;summary&gt;A summary of the method.&lt;/summary&gt;&#xA;     *  &lt;param name=&#34;firstParam&#34;&gt;A description of the parameter.&lt;/param&gt;&#xA;     *  &lt;remarks&gt;Remarks about the method.&lt;/remarks&gt; */&#xA;    public static void Bar(int firstParam) {}&#xA;}نکته:در اینجا یک ملاک سخت در مورد استفاده از فضاهای خالی در سندهای XML هنگام استفاده از /**وجود دارد:/**&#xA; * &lt;summary&gt;&#xA; * A summary of the method.&lt;/summary&gt;*/نوع دیگری از کد بالا ارائه خواهد شد:/**&#xA; * &lt;summary&gt;&#xA;   A summary of the method.&lt;/summary&gt;*/سینتکس سندسازی توضیحات XML در یک ضمیمه بی‌قاعده از استاندارد ECMA از سی شارپ وجود دارد. یک استاندارد مشابه قوانینی برای پردازش توضیحات و تبدیل آنها به متون Plain در XML را با کمک قوانین CLI فراهم می‌کند. این به هر IDE در سی شارپ و دیگر ابزار گسترش دهنده امکان پیدا کردن هر نمادی را در کدها می‌دهد.(CLR(Common Language Runtime[ویرایش]بخش مرکزی چارچوب دات‌نت، محیط اجرایی Runtime می‌باشد که اصطلاحاً به آن CLR یا .NET Runtime می‌گویند. کدهایی که تحت کنترل CLR اجرا می‌شوند اغلب به عنوان کدهای مدیریت شده نامیده می‌شوند.اگر چه، پیش از این که کدها (همه زبان‌های چارچوب دات‌نت) به وسیله CLR اجرا شوند، بایستی مورد کامپایل قرار گیرند. در چارچوب دات‌نت عمل کامپایل در دو مرحله صورت می‌گیرد:کامپایل سورس کد به MSIL.کامپایل MSIL به کد مختص پلتفرم به وسیله CLRیک نکته قابل توجه، اشتراک زبان میانی مایکروسافت با کد بایت جاوا(Bytecode)است. ایده این اشتراک از آنجا سرچشمه گرفت که چون Bytecode یک زیان سطح پایین با یک دستور زبان ساده می‌باشد (که به جای متن مبتنی بر کدهای عددی است)، می‌تواند به سرعت به کدهای بومی(Native) ترجمه شود.برخی ویژگی‌های MSIL[ویرایش]شیءگرایی و بکارگیری واسط‌هاتمایز فراوان بین انواع مقداری و ارجاعیتعیین Strong Type (این نوع داده دیگر معتبر نیست)مدیریت خطا از طریق به‌کارگیری Exceptionبکارگیری صفاتاشکالات[ویرایش]پلتفرم[ویرایش]منبع چارچوب دات‌نت مایکروسافت برای اجرا فقط ویندوز است. پیاده‌سازی‌های دیگری برای اجرای برنامه‌های سی شارپ در ویندوز، لینوکس،BSD یا Mac OS X وجود دارند اما هنوز کامل نیستند: Mono و DotGNU در نوامبر سال ۲۰۰۲ توسط مایکروسافت (نسخه ۱٫۰) برای پیاده‌سازی CLI برای کار در Free BSD و Mac OS X ۱۰٫۲ ارائه شد، اما نسخه‌های بعدی آنها فقط قابل اجرا بر روی ویندوز بود.پیشرفت در آینده[ویرایش]نسخه بعدی این زبان، سی شارپ ۴ است که از اکتبر سال ۲۰۰۸ در حال ساخته شدن است. مایکروسافت لیستی از ویژگی‌های جدید سی شارپ ۴ را در کنفرانس توسعه دهندگان حرفه‌ای اعلام کرده‌است. تمرکز اصلی در ورژن بعدی روی قابلیت هماهنگی فریم ورک‌ها و نوع زبان‌هایی است که کامال پویا یا قیمتی پویا هستند، مانند dynamic language runtime و COM. ویژگی‌های زیر تا کنون اعلام شده‌اند:پارامترهای نوع generic از نوع Covariant و contravariant[ویرایش]پارامترهای واسط‌های generic و deletageها می‌توانند با استفاده از کلمات out و in از دو نوع Covariant و contravariant باشند. این تعیین نوع‌ها بعداً برای تبدیل انواع به یکدیگر، چه از نوع صریح یا مجازی و چه از نوع compile-time یا run-time به کار می‌رود. به عنوان مثال، واسط IEnumerable&lt;T&gt; در زیر دوباره تعریف شده‌است:interface IEnumerable&lt;out T&gt;&#xA;{&#xA;  IEnumerator&lt;T&gt; GetEnumerator();&#xA;}بنابراین، هر کلاس مشتق شده‌ای که از IEnumerable&lt;Derived&gt; استفاه کرده باشد، با تمام کلاس‌های پایه که IEnumerable&lt;Base&gt; را دارند سازگار است. به عنوان تمرین، کد زیر نوشته شده‌است:void PrintAll(IEnumerable&lt;object&gt; objects)&#xA;{&#xA;  foreach (object o in objects)&#xA;  {&#xA;    Console.WriteLine(o);&#xA;  }&#xA;}&#xA;&#xA;IEnumerable&lt;string&gt; strings = new List&lt;string&gt;();&#xA;PrintAll(strings);// IEnumerable&lt;string&gt; is implicitly converted to IEnumerable&lt;object&gt;برای contravariance، رابط IComparer&lt;T&gt; به صورت زیر دوباره تعریف شده‌است:public interface IComparer&lt;in T&gt;&#xA;{&#xA;    int Compare(T x, T y);&#xA;}بنابراین، هر کلاسی که IComparer&lt;Base&gt; را برای یک کلاس پایه بیان می‌کند، با IComparer&lt;Derived&gt; در تمام واسط‌ها و کلاس‌هایی که از آن کلاس پایه مشتق شده‌اند، سازگار است. این امر نوشتن کد زیر را میسر می‌سازد:IComparer&lt;object&gt; objectComparer = GetComparer();&#xA;IComparer&lt;string&gt; stringComparer = objectComparer;جستجوی عضو پویا[ویرایش]در سامانه انواع داده‌های سی شارپ یک نوع جدید با نام شبه-نوع معرفی شده‌است که مانند System.Object رفتار می‌کند، ولی در ادامه، هر دسترسی به اعضا یا برنامه‌هایی که از این نوع استفاده می‌کنند، بدون چک شدن نوع داده‌هایشان اجازه کار دارند و تجزیه آنها تا زمان اجرا به تعویق می‌افتد. به عنوان مثال:// Returns the value of Length property or field of any object&#xA;  int GetLength(dynamic obj)&#xA;  {&#xA;    return obj.Length;&#xA;  }&#xA;&#xA;  GetLength(&#34;Hello, world&#34;);// a string has a Length property,&#xA;  GetLength(new int[] { 1, 2, 3 });// and so does an array,&#xA;  GetLength(42);// but not an integer - an exception will be thrown here at run-timeصدا زده شدن‌های متد پویا، مانند پارامترهای صریح یا مجازی با مقدار نوع dynamic راه‌اندازی می‌شوند. به عنوان مثال:void Print(dynamic obj)&#xA;  {&#xA;     Console.WriteLine(obj);// which overload of WriteLine() to call is decided at run-time&#xA;  }&#xA;&#xA;  Print(123);// ends up calling WriteLine(int)&#xA;  Print(&#34;abc&#34;);// ends up calling WriteLine(string)جستجوی پویا تحت سه مکانیزم مشخص اجرا می‌شود: COM IDispatch برای اشیاء COM، رابط IDynamicObject DLR برای اشیاء دارای این واسط و Reflection برای بقیه اشیا؛ بنابراین هر کلاس سی شارپ می‌تواند صدا زده شدن‌های پویای خود را با اجرای IDynamicObject در نمونه‌های خود جدا کند. در مورد متدهای پویا و مشخص کننده صدا زدن‌ها، تجزیه و تحلیل اضافه بار مطابق انواع اصلی که به عنوان آرگومان‌ها هستند، در زمان اجرا اتفاق می‌افتد، در غیر این صورت بر اساس قوانین تجزیه و تحلیل اضافه بار سی شارپ عمل خواهد شد. به علاوه، در مواردی که در صدا زدن پویا، گیرنده خودش پویا نیست، تجزیه و اضافه بار زمان اجرا تنها به متدهایی که در زمان کامپایل به صورت گیرنده ظاهر شده‌اند، رسیدگی می‌کند. به عنوان مثال:class Base&#xA;{&#xA;  void Foo(double x);&#xA;}&#xA;&#xA;class Derived: Base&#xA;{&#xA;  void Foo(int x);&#xA;}&#xA;&#xA;dynamic x = 123;&#xA;Base b = new Derived();&#xA;b.Foo(x);// picks Base.Foo(double) because b is of type Base, and Derived.Foo(int) is not exposed&#xA;dynamic b1 = b;&#xA;b1.Foo(x);// picks Derived.Foo(int)هر مقداری که توسط دستیابی به عضو پویا برگردانده شده باشد، خودش از نوع پویا است. مقادیر نوع پویا به سایر نوع‌ها و از سایر نوع عا قابل تبدیل هستند. در نمونه کد بالا، این امر به تابع GetLength اجازه با مقدار بازگردانده شده از Length بدون هیچ صریحی به عنوان integer استفاده کند. در زمان اجرا، مقدار واقعی به نوع خواسته شده تبدیل می‌شود.کلمه کلیدی اختیاری ref[ویرایش]در حال حاضر کلمه کلیدی ref برای متدهای صدا زننده اختیاری است. کد زیر را در نظر بگیرید:void Increment(ref int x)&#xA;{&#xA;  ++x;&#xA;}&#xA;&#xA;int x = 0;&#xA;Increment(ref x);به صورت زیر هم می‌تواند نوشته شود:void Increment(ref int x)&#xA;{&#xA;  ++x;&#xA;}&#xA;&#xA;int x = 0;&#xA;Increment(x);آرگومان‌های نام گذاری شده و پارامترهای اختیاری[ویرایش]در سی شارپ ۴ پارامترهای اختیاری ای با مقادیر پیش فرض موجود در ++C معرفی می‌شوند. به عنوان مثال:void Increment(ref int x, int dx = 1)&#xA;{&#xA;  x += dx;&#xA;}&#xA;&#xA;int x = 0;&#xA;Increment(ref x);// dx takes the default value of 1&#xA;Increment(x, 2);// dx takes the value 2به علاوه، برای کامل کردن پارامترهای اختیاری، می‌توانید صریحاً نام پارامترها را در صدازدن‌های متدها تعیین کنید. این کار به شما اجازه تصویب کردن انتخابی برای هر زیر مجموعه اختیاری از پارامترهای متد را می‌دهد. تنها محدودیت موجود این است که پارامترهای نام دار باید بعد از پارامترهای بدون نام بیایند. نام پارامترها می‌توانند برای هر دو نوع پارامترهای اختیاری و ضروری تعیین شوند و می‌توانند برای بهبود خوانایی و فراخوانی دوباره آرگومان‌ها مفید باشند. به عنوان مثال:Stream OpenFile(string name, FileMode mode = FileMode.Open, FileAccess access = FileAccess.Read) { ... }&#xA;&#xA;OpenFile(&#34;file.txt&#34;);// use default values for both &#34;mode&#34; and &#34;access&#34;&#xA;OpenFile(&#34;file.txt&#34;, mode: FileMode.Create);// use default value for &#34;access&#34;&#xA;OpenFile(&#34;file.txt&#34;, access: FileAccess.Read);// use default value for &#34;mode&#34;&#xA;OpenFile(name: &#34;file.txt&#34;, access: FileAccess.Read, mode: FileMode.Create);// name all parameters for extra readability, and use order different from method declarationپارامترهای اختیاری inter-operating را با COMراحت تر می‌کنند. در گذشته، سی شارپ مجبور بود تمام پارامترهای متد سازنده COM را پشت سر بگذارد، حتی آنهایی را که اختیاری بودند؛ به عنوان مثال:object fileName = &#34;Test.docx&#34;&#xA;object missing = System.Reflection.Missing.Value;&#xA;&#xA;doc.SaveAs(ref fileName,&#xA;    ref missing, ref missing, ref missing,&#xA;    ref missing, ref missing, ref missing,&#xA;    ref missing, ref missing, ref missing,&#xA;    ref missing, ref missing, ref missing,&#xA;    ref missing, ref missing, ref missing);با پشتیبانی از پارامترهای اختیاری، کد بالا می‌تواند به صورت زیر خلاصه شود:doc.SaveAs(&#34;Test.docx&#34;);کتابخانه‌ها[ویرایش]جزئیات مشخصات سی شارپ، حداقل تعداد نوع‌ها و کتابخانه‌های کلاس است که کامپایلر نیاز به وجود آن‌ها دارد. عملاً، اغلب سی شارپ توسط بیشترین استفاده از CLI را می‌کند، که استاندارد شده ECMA-۳۳۵ است.مثال Hello world[ویرایش]در زیر یک مثال ساده از برنامه سی شارپ آمده‌است، نسخه‌ای از مثال کلاسیک Hello World:class ExampleClass&#xA;{&#xA;    static void Main()&#xA;    {&#xA;        System.Console.WriteLine(&#34;Hello, world!&#34;);&#xA;    }&#xA;}نتیجه، چاپ شدن متن زیر د خروجی است:Hello, world!هر خط هدفی دارد:class ExampleClassدر بالا، تعریف کلاس آمده‌است. هر چیزی که در بین در علامت پرانتز باشد،ExampleClass را توصیف می‌کند:static void Main()این یک تابع عضو کلاس را در زمان شروع اجرای برنامه اعلان می‌کند. دات نت در زمان اجرا، تابع Main را صدا می‌زند (نکته: Main ممکن است از هر جای دیگری نیز صدا زده شود، مثلاً توسط تابع ExampleClass و با کد ()Main). کلمه کلیدی static تابع را بدون داشتن نمونه‌ای از ExampleClass قابل دسترس می‌کند. هر تابع Main در هر کنسولی باید به صورت static تعریف شود. در غیر این صورت برنامه به یک نمونه نیاز خواهد داشت و هر نمونه به یک برنامه نیاز دارد. برای اجتناب از این وابستگی دایره‌ای تجزیه ناپذیر، کامپایلرهای سی شارپ در صورت Static نبودن تابع Main، یک خطا اعلام می‌کنند. کلمه کلیدی void نشان دهنده این است که تابع Main هیچ مقداری را برنمی‌گرداند.Console.WriteLine(&#34;Hello, world!&#34;);خط بالا، خروجی را می‌نویسد. در فضای اسم System, Console یک کلاس استاتیک است که یک میانجی بین ورودی، خروجی و خطای کنسول می‌باشد. برنامه‌ای که متدWriteLine را از کنسول صدا می‌زند، خروجی رشته «Hello, world!» را در خروجی نمایش می‌دهد.استانداردسازی[ویرایش]در آگوست سال ۲۰۰۰، شرکت مایکروسافت، و Hewlett-Packard و شرکت اینتل به عنوان پشتیبان مشخصات سی شارپ را مانند CLI به سازمان استانداردسازی ECMA ارائه کردند. در دسامبر سال ۲۰۰۱، این سازمان، ECMA-۳۳۴ را با عنوان مشخصات زبان سی شارپ منتشر کرد. سی شارپ در سال ۲۰۰۳ به عنوان یک استاندارد ISO به ثبت رسید(ISO/IEC ۲۳۲۷۰). در سال ۲۰۰۲، ECMA دومین ویرایش از خصوصیات زبان سی شارپ را پذیرفت.در ژوئن سال ۲۰۰۵، ECMA سومین ویرایش را با اضافه کردن مواردی همچون کلاس‌های partial، متدهای ناشناس، انواع nullable و Genericها منتشر کرد. در ژوئیه ۲۰۰۵، ECMA استانداردها و TRها را همراه با پردازش Fast-Track اخیر به ISO/IEC JTC پیشنهاد کرد. این روند معمولاً ۶ تا ۹ ماه زمان می‌برد. آخرین ویرایش این زبان در ۱۵ آگوست سال ۲۰۱۲ در قالب Framework ۴٫۵ارائه گردیدکارایی[ویرایش]با توجه به توابع موجود در چارچوب دات‌نت امکان استفاده از این توابع وجود دارد که می‌توان گفت برای هر کاری شرکت مایکروسافت تابعی پیش‌بینی کرده؛ که این امکان را ایجاد می‌کند که به فایل اصلی پروژه هیچ فایل کتابخانی را اضافه نکنید (هم به صورت دستی یا خود کامپایلر). این موضوع خود باعث ایجاد فایل‌های خروجی با حجم بسیار کم می‌شود. این موضوع در بسیاری از موارد بسیار اهمیت دارد. برنامه‌های سی شارپ، همچون تمام برنامه‌های نوشته شده در چارچوب دات‌نت و سایر محیط‌های ماشینی مجازی مانند جاوا، نیازمند منابع سامانه و حافظه بیشتری نسبت به برنامه‌های نوشته شده با سایر زبان‌ها مانند سی پلاس پلاس است و هم چنین سرعت کمتری نیز دارد. هر چند تعریف زبان سی شارپ و CLI تحت استانداردهای ISO و ECMA استاندارد شده‌اند،CLI تنها قسمتی از Base Class Library (BCL) مایکروسافت می‌باشد که شامل کلاس‌های غیر استاندارد استفاده شده در برنامه‌های سی شارپ نیز می‌شود. از این گذشته، بعضی از قسمت‌های BCL تحت حق امتیاز مایکروسافت هستند که ممکن است پیاده‌سازی کامل framework را مختل کند، زیرا تنها بخش‌های استاندارد دارای حق محافظت RAND در برابر مدعیان را دارند.پیاده‌سازی‌ها[ویرایش]متداول‌ترین کامپایلر سی شارپ، Microsoft Visual C# می‌باشد.کامپایلرهای سی شارپپروژه Microsoft Rotor (در حال حاضر به عنوان Shared Source Common Language Infrastructure شناخته می‌شود) (ثبت شده فقط برای استفاده آموزشی و تحقیقی) یک پیاده‌سازی منبع اشتراکی از CLR Runtime را فراهم می‌آورد و یک کامپایلر سی شارپ، و یک زیرمجموعه از کتابخانه]] CLI Framework مورد نیاز.پروژه Mono یک اوپن سورس از کامپایلر سی شارپ است، یک پیاده‌سازی اوپن سورس کامل از CLI شامل کتابخانه‌های Framework مورد نیاز که در ECMA ظاهر شده‌اند، و یک پیاده‌سازی کامل نزدیک به بقیه کتابخانه‌های اختصاصی کلاس چارچوب دات‌نت مایکروسافت.پروژه DotGNU نیز یک اوپن سورس از کامپایلر سی شارپ است، که پیاده‌سازی آن بسیار نزدیک به Common Language Infrastructure می‌باشد و کتابخانه‌های framework مورد نیاز موجود در ECMA و زیر مجموعه‌ای از کلاس‌های کتابخانه‌ای شخصی مایکروسافت در دات نت و دات نت ۲ را دربردارد.کاملاً شبیه به پروژه Mono.نام زبان[ویرایش]اسم سی شارپ از علامت موسیقی شارپ گرفته شده‌است که در موسیقی بیان گر این است که متن نوشته شده باید نیم قدم از خط بالاتر باشد. مطابق با ECMA-۳۳۴، بخش ۶، مخفف‌ها و اختصارها، نام زبان به صورت «#C» نوشته می‌شود(«کلمه لاتین C (U+۰۰۴۳) به همراه علامت عددی #(U+۰۰۲۳)») که به صورت «سی شارپ» تلفظ می‌شود. علامت «#» نباید با علامت شارپ در موسیقی(♯، U+266F) که در یک صفحه کلید استاندارد وجود ندارد اشتباه گرفته شود. پسوند شارپ، توسط بسیاری دیگر از زبان‌های دات نت مانند #J، #A و #F نیز به کار رفته‌است. پیاده‌سازی اولیه از زبان ایفل تحت دات نت نیز #Eiffel نام داشت که الان زبان ایفل را به‌طور کامل پشتیبانی می‌کند. هم چنین این پسوند بعضی وقت‌ها در کتابخانه‌ها نیز به کار می‌رود، مانند #Gtk، #Cocoa و #Qt.ویکی پدیا</description><category>بهنام</category><author>بهنام</author><pubDate>Wed, 23 Oct 2019 01:28:48 +0330</pubDate></item><item><title>برنامه‌نویسی</title><link>https://virgool.ir/@behnamadel20/برنامهنویسی-uagjnwzdeegc</link><description>برنامه‌نویسی رایانه (به انگلیسی: Computer Programming) (یا به اختصار برنامه‌نویسی) به‌طور کلی به فرایند نوشتن و توسعه نرم‌افزار کامپیوتر گفته می‌شود. به بیان جزئی‌تر برنامه‌نویسی رایانه به معنای فرایند تبدیل و سوق دادن فرمول حل یک مسئله یا الگوریتم محاسباتی، به یک برنامه قابل اجرا (نرم‌افزار) می‌باشد.معنای برنامه‌نویسی رایانه در فرهنگ عامه می‌تواند به تمامی فرایند توسعه نرم‌افزار (به انگلیسی: Software Development) اطلاق گردد که شامل فعالیت‌های مختلفی همچون بررسی، توسعه، درک، طراحی الگوریتم؛ پیاده‌سازی، تست، اشکال زدایی و نگهداری نرم‌افزار‌های رایانه‌ای نیز می‌شود. همچنین برنامه‌نویس به شخصی اطلاق می‌گردد که عمل برنامه‌نویسی و توسعه نرم‌افزار را انجام می‌دهد.برنامه‌نویسی مستلزم فعالیت‌هایی همچون تحلیل و درک مسئله است و عموماً حل چنین مسایلی منجر به ایجاد یک الگوریتم می‌شود، بازبینی نیازمندی‌های الگوریتم که شامل صحت و میزان منابع مصرفی است، پیاده‌سازی (که معمولاً به عنوان کدینگ از آن یاد می‌شود) این الگوریتم در یک زبان برنامه‌نویسی مقصد، تست کردن، اشکال زدایی، نگهداری کد منبع، پیاده‌سازی سیستم ساخت (build system) و مدیریت مصنوعات مشتق شده مانند کد ترجمه شده به زبان ماشین برنامه‌های کامپیوتری. الگوریتم اغلب تنها به شکل قابل تجزیه و تحلیل برای انسان و قابل استدلال با منطق نمایش داده می‌شود. کد منبع به یک یا چند زبان برنامه‌نویسی، مانند ویژوال بیسیک، جاوااسکریپت، اسمال‌تاک، پایتون، جاوا، سی شارپ، سی پلاس‌پلاس و سی نوشته شده‌است.محتویات۱تاریخچه۲برنامه‌نویسی مدرن&lt;br/&gt;۲.۱نیازهای کیفیتی&lt;br/&gt;۲.۲خوانایی کد منبع&lt;br/&gt;۲.۳پیچیدگی الگوریتمی&lt;br/&gt;۲.۴کاربرد الگوریتم و روند‌نما در برنامه‌نویسی&lt;br/&gt;۲.۵روش‌ها&lt;br/&gt;۲.۶محبوب‌ترین زبان در برنامه‌نویسی&lt;br/&gt;۲.۷اشکال زدایی&lt;br/&gt;۳کاربرد زبان برنامه‌نویسی۴نمونه یک برنامه۵پارادایم‌ها۶زبان‌های برنامه‌نویسی۷برنامه‌نویس‌ها۸منابع۹جستارهای وابسته۱۰پیوند به بیرونتاریخچه[ویرایش]موضوع دستگاه‌هایی که به دنباله‌ای از دستورالعمل‌های از قبل تعریف شده عمل می‌کند برمی‌گردد به Greek Mythology.برنامه‌نویسی مدرن[ویرایش]نیازهای کیفیتی[ویرایش]هر روشی که برای برنامه‌نویسی به کار برود، برنامه نهایی باید دارای تعدادی مشخصات پایه باشد. مشخصات زیر تعدادی از مهم‌ترین آن‌ها هستند.قابلیت اطمینان: این که چقدر نتایج یک برنامه درست باشند، به صحت طراحی الگوریتم و به حداقل رساندن اشتباهات برنامه‌نویسی مربوط می‌شود. اشتباهات برنامه‌نویسی شامل اشکالاتی مثل اشکال در مدیریت منابع (مثل سرریز شدن بافر یا وضعیت رقابتی) و اشکالات منطقی (مثل تقسیم بر صفر یا خطاهای off-by-one).پایایی: این که یک برنامه چگونه اشکالاتی (نه باگ‌ها) را که ممکن است پیش بیایند، پیش‌بینی کرده‌است. این شامل حالتهایی مانند دریافت اطلاعات نادرست، نامناسب یا غلط می‌شود؛ همچنین کمبود منابعی مانند حافظه، سرویس‌های سیستم عامل یا اتصال به شبکه و سایر اشکالات مانند خطای کاربر یا اشکالات قطع برق نیز در این دسته قرار می‌گیرند.کاربرد پذیری: ارگونومی یک برنامه: آسانی استفاده از برنامه برای شخصی که می‌خواهد از آن برای کار در نظر گرفته شده‌استفاده کند یا گاهی برای کارهای پیش‌بینی نشده آن را به کار برد. این مورد می‌تواند به تنهایی و علی‌رغم تمام موارد دیگر باعث موفقیت یا شکست شود. طیف وسیعی از عناصر متنی، تصویری و گاهی سخت‌افزاری وجود دارند که می‌توانند باعث ارتقای وضوح، درک، پیوستگی، کامل بودن واسط کاربری برنامه شوند.قابلیت انتقال: طیف سخت‌افزارها و سیستم عاملهایی که کد منبع برنامه را بتوان روی آن‌ها با مترجم یا مفسر اجرا کرد. این قابلیت بستگی به تفاوت در تسهیلاتی دارد که سیستم‌های مختلف از نظر منابع سخت‌افزاری و سیستم عامل‌ها برای برنامه‌نویسی ارائه می‌کنند. همچنین رفتار پیش‌بینی شده سخت‌افزارها و سیستم‌های عامل، و در دسترس بودن مترجم‌ها (و منابع کتابخانه‌ای) اختصاصی در آن سیستم‌ها برای کد منبع موجود نیز مهم است.نگهداشت پذیری: این که سازندگان و ارتقا دهندگان فعلی برنامه یا افراد دیگری در آینده بتوانند به راحتی ارتقاها یا تغییراتی در برنامه انجام دهند تا خطاها و حفره‌های امنیتی را رفع کنند یا بتوانند آن را برای محیط جدیدی تطبیق دهند. در این مورد تلاش مناسب اولیه[۱] در ایجاد برنامه است که نقش عمده‌ای بازی می‌کند. این خاصیت ممکن است تأثیر خیلی زیادی روی کاربر نهایی برنامه نداشته باشد ولی در بلند مدت برای سرنوشت یک برنامه خیلی مهم است.کارایی / عملکرد :اندازه‌گیری منابع سیستمی مورد نیاز برای یک برنامه (زمان پردازنده، فضای حافظه، وسایل کند مثل دیسکها، پهنای باند شبکه و موارد دیگری مثل تعامل با کاربر): هر چقدر کمتر، بهتر. این خاصیت همچنین شامل مدیریت صحیح منابع مانند پاک کردن فایلهای موقت و از بین بردن نشتی‌های حافظه نیز می‌شود.خوانایی کد منبع[ویرایش]در برنامه‌ریزی رایانه، خوانایی عبارت است از این که خواننده متن کد منبع بتواند هدف، جریان برنامه و عملکرد کد منبع را متوجه شود. این موضوع در مجموعه نیازهای کیفیتی شامل موارد قابلیت انتقال، کاربرد پذیری و نگهداشت پذیری می‌شود.خوانایی خیلی مهم است به این علت که برنامه نویسان بیشترین وقتشان را به جای این که صرف نوشتن کد جدید بکنند، در زمینه درک و تغییر کد منبع موجود می‌کنند. کدهای ناخوانا معمولاً به خطا، نارسایی و کدهای تکراری ختم می‌شوند. یک تحقیق[۲] نشان داد که تغییرات جزئی و ساده‌ای برای خوانایی برنامه می‌تواند منجر به این شود که کد نهایی نوشته شده کوتاه‌تر شود و همچنین زمان فهم آن به‌طور قابل توجهی کاهش یابد.پیروی از یک سبک برنامه‌نویسی منسجم معمولاً به خوانایی کمک می‌کند؛ اگر چه خوانایی چیزی بیش از فقط سبک برنامه‌نویسی است. عوامل زیادی که معمولاً دخالتی در توانایی رایانه برای ترجمه مناسب و اجرای بهتر برنامه ندارند، به خوانایی کمک می‌کنند. بعضی از این عوامل این‌ها هستند:بلوک بندی متفاوت (فاصله سفید)یادآورهاتکه‌تکه کردن نوشته‌های طولانیقواعد نامگذاری برای اشیا (مثل متغیرها، کلاسها، روال‌ها و غیره)جنبه‌های دیداری برای این کار (مثل تورفتگی، شکستن خطوط، علامت‌گذاری رنگی و مانند اینها) معمولاً به وسیله ویرایشگر کد منبع فراهم می‌شود، اما جنبه‌های محتوایی بازتابی از استعداد و توانایی‌های برنامه‌نویس است.زبانهای برنامه‌نویسی دیداری متعددی با این منظور توسعه داده شده‌اند تا بتوانند از روش‌های غیر سنتی برای ارائه کد و تصویر استفاده کنند. محیطهای یکپارچه توسعه نرم‌افزار (IDEها) می‌خواهند تا تمام این گونه کمک‌ها را به شکل یکپارچه ارائه کنند. تکنیکهایی برای بازسازی کد می‌تواند خوانایی را افزایش دهد.پیچیدگی الگوریتمی[ویرایش]محیطهای دانشگاهی و همچنین مهندسین فعال در برنامه‌نویسی هر دو عمیقاً به دنبال کشف و تکمیل الگوریتم‌های کارآمد تر برای گروه مشکلات مشخص شده هستند. برای نیل به این هدف الگوریتم‌ها در ترتیب‌هایی طبقه‌بندی می‌شوند که به عنوان نماد O بزرگ خوانده می‌شوند. این طبقه‌بندی نشانگر استفاده الگوریتم از منابع، مثل زمان اجرا یا انباشت حافظه در ازای اندازه یک داده وارده است.برنامه نویسان حرفه‌ای با گستره‌ای از الگوریتم‌های خوب سازمان یافته آشنایی دارند و پیچیدگی‌های مخصوص آن‌ها را می‌دانند و در نتیجه از این دانسته‌ها برای انتخاب الگوریتم‌های مناسب برای شرایط مورد نظر خود، استفاده می‌کنند.کاربرد الگوریتم و روند‌نما در برنامه‌نویسی[ویرایش]یکی از مهم‌ترین پیش‌نیازهای برنامه‌نویسی اطلاع داشتن از نحوهٔ حل مسئله و الگوریتم‌های برنامه‌نویسی است، الگوریتم‌ها به صورت خاص نحوهٔ حل و منطق زبان برنامه‌نویسی را بیان می‌کنند، نمای تصویری الگوریتم را روندنما می‌نامند، پس از نوشتن یک الگوریتم کامل برنامه‌نویسی می‌توان اقدام به رسم روندنما کرد تا نمود بصری الگوریتم به خوبی نمایان گردد.[۳]روش‌ها[ویرایش]قدم اول در فرایند توسعه بیشتر نرم‌افزارها به شکل معمول شامل بررسی نیازمندی‌ها، سپس آزمایش برای تشخیص الگوی متغیرها، اجرا و سپس حذف خرابی‌ها (اشکال زدایی) است. راه‌های مختلفی برای رسیدن به هر کدام از این وظایف وجود دارند. یک راه پرطرفدار برای تحلیل نیازمندی‌ها تحلیل مورد کاربردی است. بسیاری از برنامه نویسان از شکل توسعه چابک نرم‌افزاری استفاده می‌کنند؛ در این روش مراحل مختلف توسعه نرم‌افزار به شکل چرخه‌های کوتاه با هم ترکیب می‌شوند به‌طوری‌که هر کدام از این چرخه‌ها فقط چند هفته طول بکشند. این در مقابل روش معمول است که ممکن است چند سال زمان ببرد. روش‌های خیلی زیادی برای روند توسعه برنامه‌ها وجود دارند.محبوب‌ترین زبان در برنامه‌نویسی[ویرایش]تعیین اینکه محبوب‌ترین زبان برنامه‌نویسی مدرن کدام است کار بسیار مشکلی است. بعضی از زبان‌ها در کاربردهای خاصی محبوب است و بعضی دیگر مرتباً در نوشتن کاربردهای گوناگون استفاده می‌شود. روش‌های اندازه‌گیری محبوبیت زبان شامل موارد زیر می‌باشد: شمردن تعداد آگهی‌های اشتغال و توجه به یک زبان، تعداد کتاب‌های آموزشی فروخته شده در مورد یک زبان، تخمین تعداد خطوط کد نوشته شده در یک زبان. که می‌توان با استفاده سوابق کاری ایجاد شده با نرم‌افزارهای برنامه‌نویسی، زبان برنامه ویژوال بیسیک را جز محبوب‌ترین زبان یاد کرد.اشکال زدایی[ویرایش]اشکال زدایی وظیفه بسیار مهمی در فرایند توسعه نرم‌افزار می‌باشد، زیرا یک برنامه غلط می‌تواند پیامدهای مهمی برای کاربر خود داشته باشد. بعضی از زبان‌ها بیشتر در معرض برخی اشتباهات می‌باشند، به خاطر خصوصیاتشان نیاز به بررسی بیشتر کامپایلر نسبت به زبان‌های دیگر ندارند.کاربرد زبان برنامه‌نویسی[ویرایش]اجرا و عملی ساختن الگوریتم‌های انتزاعی وابسته به هم به‌وسیله تولید یک برنامه رایانه‌ای مشخص با ابزار زبان برنامه‌نویسی ممکن است.نمونه یک برنامه[ویرایش]یک برنامهٔ ساده در زبان برنامه‌نویسی Basic که از ساده‌ترین زبان‌های برنامه‌نویسی است می‌تواند به شکل زیر باشد:REM MY FIRST TRY TO COMMAND THIS MACHINE TO DO WHAT I LIKE&#xA; PRINT &#34;HELLO NEW WORLD!&#34;&#xA; ENDسطر نخست که با واژه کلیدی &#34;REM&#34; آغاز شده و از سوی برنامهٔ واسط در نظر گرفته نمی‌شود و تنها برای نگاه داشتن یک توضیح یا مانند آن برای خود برنامه‌نویس است. سطر دوم با واژه کلیدی &#34;PRINT&#34; به دستگاه فرمان می‌دهد تا نوشته &#34;HELLO NEW WORLD!&#34; (&#34;سلام دنیای نو!&#34;) را روی نمایشگر بنویسد (چاپ کند). سطر آخر پایان فرامین و برنامه را به ماشین اطلاع می‌دهد.پس از نوشتن یک برنامه مانند بالا، برنامهٔ مترجم (در اینجا Basic) دستورها را تبدیل به فرامینی می‌کند که لایه زیرین، که ممکن است همان سخت‌افزار باشد، می‌تواند آن‌ها را اجرا کند.برای راحت‌تر شدن کدنویسی (برنامه‌نویسی) از نرم‌افزارهای مختلفی وابسته به زبان ان استفاده می‌کنند به عنوان مثال برای کدنویسی به زبان c# از نرم‌افزار visual studio, sql server... استفاده می‌شود.پارادایم‌ها[ویرایش]مقاله اصلی: پارادایم برنامه‌نویسیزبان‌های برنامه‌نویسی گوناگون براساس قابلیت‌های در نظر گرفته شده از شیوهٔ خط‌های مختلف استفاده می‌کنند. موارد ریزتری مانند چگونگی برخورد با نیازهای پشت پردهٔ ماشین مانند مدیریت حافظه و مدیریت زباله نیز در زبان‌های مختلف متفاوت است. علاوه بر این‌ها، مفاهیمی متفاوت از (اجرای) یک برنامه تصور شده‌اند که پارادایم یا الگو نام دارند.زبان‌های برنامه‌نویسی[ویرایش]مقاله اصلی: زبان برنامه‌نویسیزبان‌های متعدد برنامه‌نویسی وجود دارند که هر کدام از آن‌ها سبک‌های خاصی را پشتیبانی می‌کنند . انتخاب زبان برنامه‌نویسی مورد نظر بر اساس ملاحظات متعددی صورت می‌گیرد: مانند سیاست شرکت، مناسب بودن برای وظیفه در نظر گرفته شده، موجود بودن بسته‌های برنامه از پیش آماده شده یا نظرات شخصی. به شکل ایده‌آل مناسب‌ترین زبان برنامه‌نویسی برای کاربرد مورد نظر که در دسترس باشد، انتخاب می‌شود. موضوعاتی که باعث می‌شوند از این وضعیت ایده‌آل فاصله گرفته شوند شامل موضوعاتی مانند یافتن تعداد کافی برنامه نویسان ماهر که بتوانند تیم کاری تشکیل دهند، در دسترس بودن کامپایلرهای مناسب برای زبان مورد نظر، کارایی برنامه‌های نوشته شده با زبان مورد نظر، است.زبان‌های برنامه‌نویسی در طیفی بین زبان‌های &#34;سطح پائین &#34; تا &#34;زبان‌های سطح بالاً قرار می‌گیرند. زبان‌های سطح پائین معمولاً به زبان ماشین نزدیکتر هستند و سریعتر اجرا می‌شوند، در مقابل زبان‌های سطح بالا خلاصه تر و برای کاربرد آسان‌تر هستند ولی با سرعت کمتری اجرا می‌شوند. کد نویسی با زبان‌های سطح بالا معمولاً آسان‌تر از کد نویسی با زبان‌های سطح پائین هستند.آلن داونی در کتاب &#34; چگونه به شکل یک استاد رایانه فکر کنیم &#34; می‌نویسد:جزئیات در زبان‌های برنامه‌نویسی مختلف متفاوت به نظر می‌رسند ولی تعدادی از ساختارهای اساسی در همه زبان‌های برنامه‌نویسی یکسان هستند:ورودی: داده‌ها را از صفحه کلید، یک فایل یا وسایل دیگر فراهم می‌کند.خروجی: اطلاعات را روی صفحه تصویر نشان می‌دهد، به یک فایل می‌فرستد یا به دستگاه‌های دیگری انتقال می‌دهد.محاسبات: اعمال محاسباتی اساسی مثل جمع و ضرب را انجام می‌دهد.حالت‌های شرطی: شرط‌های مشخصی را کنترل می‌کند و بر اساس آن رشته مناسبی از عبارات را اجرا می‌کند.حلقه: بعضی اعمال را به شکل تکراری انجام می‌دهد، معمولاً با استفاده از تعدادی از متغیرها این کار انجام می‌شود.بسیاری از زبان‌های برنامه‌نویسی مکانیسم‌هایی را برای استفاده از کتابخانه‌های مشترک فراهم می‌کنند. توابعی در این کتابخانه‌ها بر اساس الگوهای مناسب اجرایی ایجاد می‌شوند (مانند روش‌های انتقال آرگومان‌ها) و سپس می‌توان از این توابع در زبان‌های متعدد برنامه‌نویسی استفاده کرد.منبع: ویکیپدیا</description><category>بهنام</category><author>بهنام</author><pubDate>Tue, 22 Oct 2019 19:34:56 +0330</pubDate></item></channel></rss>