سوالات مصاحبه برنامه نویسی #C — راهنمای استخدام

آخرین به‌روزرسانی: ۱۹ بهمن ۱۴۰۰
زمان مطالعه: ۳۲ دقیقه
سوالات مصاحبه برنامه نویسی #C — راهنمای استخدام

در این مطلب مهم‌ترین سوالات مصاحبه برنامه نویسی #C در سطح‌های مختلف مقدماتی، متوسط و پیشرفته مورد بررسی قرار می‌گیرند. افراد به واسطه مطالعه این راهنمای استخدام می‌توانند خود را برای مصاحبه‌های کاری برنامه نویسی آماده کنند و از آن به عنوان یک روش کمکی برای ارتقای مهارت‌های خود و مرور بیش‌تر مطالب استفاده کنند. اما پیش از بررسی سوالات مصاحبه برنامه نویسی #C ، لازم است یک تعریف کلی از زبان برنامه نویسی سی شارپ و مزیت‌های آن ارائه شود.

فهرست مطالب این نوشته
سوالات مصاحبه برنامه نویسی #C در سطح مقدماتی
سوالات مصاحبه برنامه نویسی #C در سطح پیشرفته

زبان برنامه نویسی C#‎ چیست ؟

سی شارپ یک زبان برنامه نویسی شی‌گرا است که توسط شرکت مایکروسافت ارائه شده است و همراه با فریم ورک دات نت به کار می‌رود. این زبان برنامه نویسی در کنار فریم ورک دات نت، این امکان را به برنامه نویسان می‌دهد که وب سایت‌ها، اپلیکیشن‌ها و بازی‌های مختلف را ایجاد کنند. سه دلیل برای محبوبیت زبان برنامه نویسی سی شارپ وجود دارد که در ادامه فهرست شده‌‌اند:

  • سادگی: در مقایسه با بسیاری از سایر زبان‌های برنامه نویسی، شروع یادگیری کدنویسی در سی شارپ آسان‌تر است.
  • استفاده وسیع برای توسعه: با استفاده از سی شارپ، افراد بیش از پیش علاقه به ساخت اپلیکیشن‌های تحت وب و بازی‌ها دارند. علاوه بر این، سی شارپ ویژگی‌‌های مطلوبی مانند Garbage Collection خودکار، رابط‌ها (Interfaces) و موارد دیگری را دارد که با کمک آن‌ها می‌توان اپلیکیشن‌های بهتری ساخت.
  • مخاطب هدف متعدد: به دلیل مشارکت با مایکروسافت، معمولاً اپلیکیشن‌های ساخته شده با زبان سی شارپ، مخاطبان هدف گسترده‌تری دارند.

با توجه به اینکه زبان برنامه نویسی سی شارپ به طور گسترده، چه از سوی سازمان‌های بزرگ و چه از سوی کسب و کارهای کوچک، مورد استفاده قرار می‌گیرد، مطلوب است که افراد با انواع سوالات مصاحبه برنامه نویسی #C آشنایی داشته باشند تا بدین طریق شانس خود را به عنوان یک کاندید مناسب برای برنامه نویسی حرفه‌ای در مشاغل مختلف افزایش دهند. در بخش بعدی از این راهنمای استخدام، به بررسی سوالات مصاحبه برنامه نویسی #C در سطح مقدماتی پرداخته شده است.

زبان برنامه نویسی سی شارپ چیست

سوالات مصاحبه برنامه نویسی #C در سطح مقدماتی

در این بخش از راهنمای استخدام به سوالات مصاحبه برنامه نویسی #C در سطح مقدماتی و مبتدی پرداخته می‌شود. اولین سوال اساسی که ممکن است در مصاحبه برنامه نویسی C#‎ پرسیده شود، می‌تواند شرح و معرفی این زبان باشد که در ادامه به آن پرداخته شده است.

زبان برنامه نویسی سی شارپ را معرفی کنید؟

سی شارپ یک زبان برنامه نویسی شی گرا (OOP) به حساب می‌آید که در سال ۱۳۷۸ (۲۰۰۰ میلادی) توسط شرکت مایکروسافت ارائه شده است. سی شارپ با هدف ایجاد یک زبان برنامه نویسی همه منظوره ساخته شده است که می‌توان از آن جهت توسعه انواع نرم افزارها برای پلتفرم‌های (سکوهای) مختلفی از جمله ویندوز، وب و موبایل استفاده کرد. امروزه زبان سی شارپ یکی از محبوب‌ترین زبان‌های برنامه نویسی در دنیا به حساب می‌آید و هزاران توسعه دهنده نرم افزار از زبان برنامه نویسی C#‎ برای ساخت انواع نرم افزارها استفاده می‌کنند.

تفاوت زبان برنامه نویسی C#‎ با زبان C چیست؟

C یک زبان برنامه نویسی رویه‌ای (Procedural) است، اما زبان برنامه نویسی سی شارپ شی‌گرا (Object-Oriented) به حساب می‌آید. علاوه بر این، یکی دیگر از تفاوت‌های عمده این دو زبان برنامه نویسی این است که در سی شارپ، قابلیت «بازیافت حافظه» (Garbage Collection) به صورت خودکار و از طریق «زمان اجرای زبان مشترک» (CLR) وجود دارد، در صورتی که زبان C دارای این ویژگی نیست. به طور اساسی سی شارپ برای اجرا به فریم ورک (چارچوب نرم افزاری) دات نت نیاز دارد، اما C یک زبان مستقل از پلتفرم به حساب می‌آید.

مفهوم کلاس در زبان برنامه نویسی C#‎ چیست؟

همان‌طور که پیش‌تر به آن اشاره شد، سی شارپ یک زبان برنامه نویسی شی‌گرا به حساب می‌آید. کلاس‌ها پایه‌های اصلی این زبان برنامه نویسی هستند. یک کلاس قالبی است که یک ساختار داده بر اساس آن شکل می‌گیرد. کلاس نحوه ذخیره‌سازی داده‌ها، مدیریت و انتقال آن‌ها را تعیین می‌کند. یک کلاس دارای اجزایی شامل فیلدها، خصوصیت‌ها (Property)، متدها (Method) و سایر اعضا است.

انواع کلاس در C#‎ کدامند؟

سی شارپ دارای چهار نوع کلاس است که در ادامه فهرست شده‌اند:

  • کلاس ایستا (Static Class): این کلاس با کلمه کلیدی «static» تعریف می‌شود و در آن ارث‌بری (Inheritance) مجاز نیست. به همین دلیل امکان ایجاد کلاس دیگری بر اساس یک کلاس ایستا وجود ندارد. به منظور درک بهتر نحوه اعلان یک کلاس ایستا در سی شارپ، در ادامه یک کلاس از این نوع با عنوان ‌classname ارائه شده است:
static class classname  
{  
  //static data members  
  //static methods  
}
  • کلاس جزئی (Partial Class): کلاس جزئی یا همان Partial با استفاده از کلمه کلیدی «partial» تعریف می‌شود و به اعضای خود این امکان را می‌دهد که فایل‌های منبع (‎.cs) را به صورت جزئی تقسیم‌بندی کنند یا به اشتراک بگذارند.
  • کلاس انتزاعی (Abstract Class): این دسته از کلاس‌های سی شارپ در بخش‌هایی که امکان ساخت اشیا نیست، قابلیت نمونه‌برداری شدن ندارند. عملکر کلاس‌های انتزاعی پیرامون مفاهیم شی‌گرایی مربوط به انتزاع است. انتزاع به منظور استخراج جزییات ضروری و در نقطه مقابل، پنهان کردن اطلاعات غیرضروری به کار می‌روند.
  • کلاس مهر و موم شده (Sealed Class): این کلاس‌ها قابلیت به ارث برده شدن را ندارند. با استفاده از کلمه کلیدی «sealed» می‌توان دسترسی کاربران برای به ارث بردن آن کلاس خاص را محدود کرد. به منظور آشنایی با ساختار کلاس مهر و موم شده در ادامه مثالی برای آن ارائه خواهد شد:
sealed class InterviewBit
{
   // data members
   // methods
   .
   .
   .
}

مفهوم شی را در C#‎ تعریف کنید؟

در حالی که کلاس‌ها طرح (مدل | مفهوم | ساختار) به حساب می‌آیند، اشیا موجودیت‌هایی واقعی به شمار می‌روند. شی به وسیله ایجاد از نمونه‌هایی از کلاس‌ها پدید می‌آید. به بیان ساده، هر موجودیت واقعی که دارای مشخصه‌های خاصی باشد یا امکان اجرای یک عملی را داشته باشد، یک شی تلقی می‌شود. برای ساخت یک شی جدید در C#‎ کلمه کلیدی New به کار می‌رود. کلاسی که یک شی را در حافظه ایجاد می‌کند، دارای اطلاعات مختلفی در مورد متدها، متغیرها و رفتارهای کلاس است.

برنامه نویسی در سی شارپ

منظور از سازنده در سی شارپ چیست؟

سازنده (Constructor) تابع عضوی (Member Function) در یک کلاس به حساب می‌آید که نام آن دقیقاً با نام آن کلاس یکسان است. زمانی که یک شی از کلاس ایجاد می‌شود، سازنده به صورت خودکار فراخوانی خواهد شد. همزمان با راه‌اندازی اولیه کلاس، مقادیر اعضای داده‌ها با استفاده از سازنده، ایجاد می‌شوند.

منظور از آرایه‌های دندانه‌دار در سی شارپ چیست؟

در سی شارپ، آن دسته از آرایه‌هایی که عناصر آن هم خود از نوع آرایه هستند، با نام «آرایه‌های دندانه‌دار» (Jagged Arrays) شناخته می‌شوند. عناصر آرایه دندانه‌دار می‌توانند در ابعاد و اندازه‌های مختلفی باشند. همچنین می‌توان این نوع از آرایه‌ها را «آرایه‌ای از آرایه‌ها» نیز خطاب کرد.

کاربرد عبارت using در سی شارپ چیست؟

بلوک using به منظور دریافت یک منبع و پردازش آن استفاده می‌شود. علاوه بر این، زمانی که اجرای کد با استفاده از این منبع به اتمام برسد، عمل آزاد‌سازی (Dispose) به صورت خودکار با استفاده از using انجام خواهد شد.

تسلسل در سی شارپ به چه معنا است؟

زمانی که لازم باشد یک شی از طریق یک شبکه منتقل شود، لازم است شی به جریانی از بایت‌ها تبدیل شود. به فرآیندی که در آن یک شی به جریانی از بایت‌ها تبدیل می‌شود، پیاپی‌سازی (دنباله‌سازی | Serialization) می‌گویند. به منظور تسلسل‌سازی (Serialize کردن) یک شی، باید رابط ISerialize را پیاده‌سازی کند. معکوس این فرآیند، یعنی ساخت یک شی با کمک جریانی از بایت‌ها، De-Serialization نامگذاری شده است.

زمان اجرای زبان مشترک چیست؟

زمان اجرای زبان مشترک (CLR | Common Language Runtime) یک موتور اجرایی است که رسیدگی به اجرای برنامه را برای زبان‌های مختلف از جمله سی شارپ انجام می‌دهد. به واسطه معماری زبان اجرای مشترک، مواردی مانند مدیریت حافظه‌ (Memory Management)، بازیافت حافظه و مدیریت و رسیدگی به مسائل امنیتی انجام می‌شوند.

منظور از بازیافت حافظه در سی شارپ چیست؟

بازیافت حافظه یا همان Garbage Collection فرآیند آزادسازی حافظه‌هایی است که توسط اشیا ناخواسته اشغال شده‌‌اند. هنگامی که یک شی کلاس ایجاد می‌شود، به طور خودکار مقداری فضای حافظه به شی در حافظه پشته اختصاص داده خواهد شد. در چنین شرایطی، پس از انجام تمام اعمال بر روی شی، فضای حافظه اشغال شده توسط شی به هدر می‌رود. از این رو، لازم است حافظه آزادسازی شود. جمع‌آوری زباله یا همان Garbage Collection، در سه حالت انجام می‌شود که در ادامه فهرست شده‌‌‌اند:

  • زمانی که حافظه مورد استفاده توسط شی از مقدار آستانه از پیش تعیین شده فراتر برود.
  • در شرایطی که متد Garbage Collection فراخوانی شود.
  • در صورتی که سیستم مورد استفاده از لحاظ فیزیکی فضای کمی را دارا باشد، فرآیند Garbage Collection انجام می‌‌شود.

برای آشنایی بیش‌تر با ساز و کار مدیریت حافظه در سی شارپ، می‌توان به مقاله زیر رجوع کرد.

سوالات مصاحبه برنامه نویسی #C

منظور از کدهای مدیریت شده و مدیریت نشده چیست؟

با کمک کد مدیریت شده (Managed) این امکان فراهم می‌شود که بتوان کد را روی محیط زمان اجرای زبان مشترک یا همان ‌CLR در فریم ورک دات نت اجرا کرد. علاوه بر این، کد مدیریت شده به جای اجرا شدن روی خود سیستم عامل، روی محیط زمان اجرای مدیریت شده اجرا خواهد شد. از جمله فوایدی که این موضوع دارد، می‌توان به ارائه خدمات مختلفی به بازیافت کننده حافظه، رسیدگی به استثناعات (Exception Handling) و سایر موارد پراهمیت اشاره کرد.

کدهای مدیریت نشده در محیط زمان اجرای زبان مشترک اجرا نمی‌شوند، بلکه خارج از فریم ورک دات نت کار می‌کنند. در این شرایط، خدمات مختلف زبان‌های سطح بالا ارائه نمی‌شوند و بنابراین، این کدها بدون آن‌ها اجرا خواهند شد. زبان برنامه نویسی سی‌پلاس‌پلاس (++C) یکی از مثال‌های آن به حساب می‌آید.

در این بخش از مقاله «سوالات مصاحبه برنامه نویسی #C» به بررسی برخی از کلیدی‌ترین پرسش‌های مقدماتی برنامه نویسی با سی شارپ پرداخته شد. اکنون در ادامه پیش از پرداختن به سایر سوالات مصاحبه برنامه نویسی C#‎ ، تعدادی از دوره‌های آموزش برنامه نویسی سی شارپ فرادرس معرفی شده‌اند.

فیلم های آموزش سی شارپ فرادرس

معرفی فیلم های آموزش سی شارپ فرادرس

استفاده از دوره‌های آموزشی سی شارپ فرادرس برای افرادی مناسب است که می‌خواهند یادگیری این زبان یا تکمیل آموخته‌های خود را به بهترین شکل ممکن انجام دهند. در زمان تدوین این مقاله، مجموعه آموزش سی شارپ فرادرس دارای چهل دوره آموزشی مختلف است که به صورت محتوای ویدئویی ارائه می‌شوند. در این مجموعه آموزشی، دوره‌های آموزشی گوناگونی در سطوح مختلف از جمله مقدماتی، پیشرفته، کاربردی و پروژه محور برای یادگیری زبان C#‎ ارائه شده‌اند. برخی از پراستفاده‌ترین دوره‌های این مجموعه در ادامه معرفی و فهرست شده‌اند:

  • فیلم آموزش مقدماتی برنامه نویسی سی شارپ (مدت زمان: ۸ ساعت و ۱۸ دقیقه، مدرس: وحید اسدزاده): افراد تازه‌کار در حوزه برنامه نویسی می‌توانند از این دوره آموزشی به عنوان نقطه آغازین برای یادگیری زبان برنامه نویسی سی شارپ استفاده کنند. برای مشاهده فیلم آموزش مقدماتی برنامه نویسی سی شارپ (#C) + کلیک کنید.
  • فیلم آموزش کاربردی برنامه نویسی C#‎ (مدت زمان: ۱۳ ساعت و ۵۸ دقیقه، مدرس: رشید شجاعی): این دوره آموزشی برای افرادی مناسب است که می‌خواهند مفاهیم مربوط به زبان سی شارپ را به صورت جامع و کاربردی فرا بگیرند. برای مشاهده فیلم آموزش کاربردی برنامه نویسی C#‎ (سی‌شارپ) + کلیک کنید.
  • فیلم آموزش شی‌گرایی در سی شارپ (مدت زمان: ۱۴ ساعت و ۳ دقیقه، مدرس: رشید شجاعی): در این دوره فرادرس، مفاهیم شی‌گرایی به عنوان یکی از مباحث پراهمیت برنامه نویسی در سی شارپ آموزش داده شده است. برای مشاهده فیلم آموزش شی‌ گرایی در سی شارپ (C#‎) + کلیک کنید.
  • فیلم آموزش پروژه محور ASP.NET Core – طراحی سایت رزرو هتل – بخش اول (مدت زمان: ۴ ساعت و ۵۶ دقیقه، مدرس: علیرضا بهارلوئی): این دوره برای افرادی مناسب است که می‌خواهند نحوه کار با ASP.NET را به صورت پروژه محور فرا بگیرند. برای مشاهده فیلم آموزش پروژه محور ASP.NET Core – طراحی سایت رزرو هتل – بخش اول + کلیک کنید.
  • فیلم آموزش کاربردی Entity Framework در سی‌شارپ (مدت زمان: ۱۲ ساعت، مدرس: مهندس بهروز دیندار): در این دوره آموزشی، نحوه استفاده از Entity Framework به عنوان یک ORM در سی شارپ به طور کامل مورد بررسی قرار می‌گیرد. لازم به ذکر است که Entity Framework یک نگاشت‌گر شی به رابطه محسوب می‌شود. برای مشاهده فیلم آموزش کاربردی Entity Framework در سی‌شارپ (#C) + کلیک کنید.
  • فیلم آموزش چارچوب توسعه تحت وب ASP.NET MVC (مدت زمان: ۲۰ ساعت و ۵۲ دقیقه، مدرس: نیما مسقدی): این دوره برای افرادی مطلوب است که علاوه بر مفاهیم سی شارپ، قصد یادگیری فریم‌ورک ASP.NET MVC جهت توسعه تحت وب را دارند. برای مشاهده فیلم آموزش چارچوب توسعه تحت وب ASP.NET MVC + کلیک کنید.

اکنون به ادامه بررسی سوالات مصاحبه برنامه نویسی C#‎ در سطح مقدماتی پرداخته می‌شود.

سوالات مصاحبه برنامه نویسی سی شارپ

منظور از Interface در برنامه نویسی C#‎ چیست ؟

یک واسط یا همان Interface حاوی تعاریفی برای گروهی از قابلیت‌های مرتبط است که یک کلاس غیرانتزاعی یا یک ساختار (Struct) باید آن‌ها را پیاده‌سازی کند. یک واسط ممکن است متدهای ایستایی را تعریف کند که باید دارای یک پیاده‌سازی باشند. از نسخه ۸ سی شارپ، یک واسط ممکن است پیاده‌سازی پیش‌فرضی را برای اعضای داده تعریف کند.

تفاوت میان کلاس انتزاعی و اینترفیس چیست؟

در ادامه، برخی از تفاوت‌های اساسی کلاس انتزاعی (Abstract Class) و رابط (Interface) فهرست شده‌اند:

  • کلاس انتزاعی قابلیت Full Abstraction را ارائه نمی‌دهد، اما با استفاده از اینترفیس این امکان فراهم خواهد شد.
  • با استفاده از کلاس انتزاعی، امکان دست‌یابی به وراثت چندگانه (Multiple Inheritance) وجود ندارد؛ در حالی که با کمک اینترفیس امکان رسیدن به وراثت چندگانه وجود خواهد داشت.
  • در اینترفیس امکان تعریف کردن یک فیلد عضو وجود ندارد.
  • در داخل یک اینترفیس، استفاده از هیچ تغییردهنده دسترسی (Access Modifier) از جمله نوع‌های عمومی (Public)، خصوصی (Private)، محافظت شده‌ (Protected)، داخلی (Internal) و سایر موارد امکان‌پذیر نیست. به این دلیل که به طور پیش‌فرض همه موارد در اینترفیس به صورت عمومی یا همان سراسری هستند.
  • عضو اینترفیس با استفاده از کلمه‌های کلیدی مختلفی مانند abstract ،virtual ،static و sealed قابل تعریف در برنامه نیست.
  • با توجه به اینکه کلاس‌های انتزاعی هم متدهای انتزاعی و هم متدهای غیرانتزاعی دارند، لازم است از کلمه کلیدی abstract برای اعلان آن‌ها استفاده شود. در صورتی که تمام متدهای اینترفیس به صورت انتزاعی هستند.

به منظور آشنایی بیش‌تر با ساختار یک کلاس انتزاعی و یک اینترفیس و همچنین تفاوت میان آن‌ها، لازم است به مثال زیر توجه شود.

کدهای زیر مربوط به کلاس انتزاعی هستند:

public abstract class Shape{
public abstract void draw();
}

کدهای زیر برای اینترفیس به کار می‌روند:

public interface Paintable{
void paint();
}

تفاوت‌های دو کلمه کلیدی ref و out چیست؟

در زبان برنامه نویسی سی شارپ، با استفاده از کلمه کلیدی «ref»، آرگومان‌ها به جای ارجاع از طریق مقدار، به وسیله منبع (مرجع | Reference) ارجاع داده می‌شوند. برای استفاده از کلمه کلیدی ref، لازم است این عبارت به صورت صریح قید شود. در ادامه کدهایی برای مثال آمده است:

void Method(ref int refArgument)
{
   refArgument = refArgument + 10;
}
int number = 1;
Method(ref number);
Console.WriteLine(number);
// Output: 11

با استفاده از کلمه کلیدی out در سی شارپ، آرگومان‌ها درون متدها و توابع ارجاع داده می‌شوند. کلمه کلیدی out به منظور ارجاع دادن در یک متد به عنوان مرجع به کار می‌رود و چندین مقدار را برمی‌گرداند. با وجود اینکه کارکرد این کلمه کلیدی مشابه کلمه کلیدی ref است، اما پیش از ارجاع دادن ref، لازم است این کلمه کلیدی مقداردهی اولیه (Initialized) شود. در صورتی که هدف برگرداندن مقدار در متغیرهای یکسانی باشد که به عنوان آرگومان ارجاع داده شده‌اند، هر دو کلمه کلیدی out و ref مفید و کاربردی هستند. برای درک بهتر مفاهیم مذکور، بهتر است به قطعه کد زیر توجه شود:

public static string GetNextFeature(ref int id)  
{  
   string returnText = "Next-" + id.ToString();  
   id += 1;  
   return returnText;  
}  
public static string GetNextFeature(out int id)  
{  
   id = 1;  
   string returnText = "Next-" + id.ToString();  
   return returnText;  
}   

متدهای توسعه در سی شارپ کدامند؟

متدهای توسعه (Extension Methods) به برنامه نویس این امکان را می‌دهند تا متدهای جدیدی را به متدهای فعلی اضافه کند. متدهای اضافه شده به صورت ایستا هستند. در برخی از مواقع، زمانی که هدف اضافه کردن یک متد به متدهای فعلی باشد، به طوری که اجازه تغییر کلاس مربوطه وجود نداشته باشد، می‌توان یک کلاس ایستای جدید ساخت که حاوی متدهای جدید است. زمانی که متدهای توسعه یافته تعریف شدند، با پیوند این کلاس جدید به کلاس موجود، می‌توان مشاهده کرد که کلاس مورد نظر به آن اضافه شده است. حال به قطعه کد زیر توجه شود:

// C# program to illustrate the concept
// of the extension methods
using System;
 
namespace ExtensionMethod {
static class NewMethodClass {
 
   // Method 4
   public static void M4(this Scaler s)
   {
       Console.WriteLine("Method Name: M4");
   }
 
   // Method 5
   public static void M5(this Scaler s, string str)
   {
       Console.WriteLine(str);
   }
}
 
// Now we create a new class in which
// Scaler class access all the five methods
public class IB {
 
   // Main Method
   public static void Main(string[] args)
   {
       Scaler s = new Scaler();
       s.M1();
       s.M2();
       s.M3();
       s.M4();
       s.M5("Method Name: M5");
   }
}
}

خروجی کدهای فوق به صورت زیر است:

Method Name: M1
Method Name: M2
Method Name: M3
Method Name: M4
Method Name: M5

منظور از توابع Boxing و Unboxing در زبان برنامه نویسی سی شارپ چیست؟

دو تابع Boxing و Unboxing برای تبدیل نوع به کار برده می‌شوند. با کمک تابع Boxing، نوع‌های مقداری از جمله عدد صحیح (Int)، کاراکتر (Char) و سایر موارد به نوع مرجع (شی) تبدیل می‌شوند. این تبدیل یک فرآیند ضمنی است و با استفاده از مقدار شی انجام می‌شود. برای درک بهتر عملکرد Boxing، به مثال زیر توجه شود:

int num = 23; // 23 will assigned to num
Object Obj = num; // Boxing

تابع Unboxing به منظور تبدیل نوع مرجع یعنی شی، به نوع مقدار (عدد صحیح، کاراکتر و سایر موارد) است. این فرآیند تبدیل، به صورت صریح و غیرضمنی انجام می‌شود. با توجه کردن به مثال زیر، درک بهتری از فرآیند تبدیل Unboxing و مفاهیم مرتبط با آن حاصل خواهد شد:

int num = 23;         // value type is int and assigned value 23
Object Obj = num;    // Boxing
int i = (int)Obj;    // Unboxing

Genericها در سی شارپ چه هستند؟

در مجموعه‌های C#‎ یا همان Collectionهای سی شارپ، تعریف هر نوعی از شی امکان‌پذیر است که با قانون اساسی ایمنی نوع (Type-Safety) در تضاد است. به همین دلیل، از Genericها استفاده می‌شود تا ایمنی نوع در کدها رعایت شود. این کار با فراهم کردن امکان استفاده مجدد از الگوریتم‌های پردازش داده میسر می‌شود. Genericها در سی شارپ یعنی به هیچ نوع داده خاصی پیوند وجود نداشته باشد.

Genericها سربار استفاده ا اشیای Boxing و Unboxing و همچنین تغییر نوع (Typecasting) را کاهش می‌دهند. Genericها همیشه بین دو علامت بزرگ‌تر و کوچکتر یعنی در داخل <> قرار می‌گیرند. به منظور تعریف یک کلاس ژنریک، باید از سینتکس زیر استفاده کرد:

GenericList<float> list1 = new GenericList<float>();
GenericList<Features> list2 = new GenericList<Features>();
GenericList<Struct> list3 = new GenericList<Struct>();

در کدهای فوق، GenericList<float>‎ یک کلاس Generic است. در هر یک از نمونه‌های GenericList<T>‎، هر رخداد T در کلاس، با آرگومان نوع در زمان اجرا جایگزین می‌شود. با جایگزین کردن T، سه ایمنی نوع مختلف با استفاده از یک کلاس یکسان ساخته می‌شوند.

تفاوت Array با ArrayList در سی شارپ چیست؟

آرایه (Array) مجموعه‌ای از متغیرهای مشابه به حساب می‌آید که تحت یک عنوان مشترک در کنار یکدیگر قرار داده می‌شوند. در صورتی که، ArrayList مجموعه‌ای از اشیا است که امکان شاخص‌گذاری یا همان ایندکس کردن آن‌ها به صورت تک به تک وجود دارد. با استفاده از ArrayList می‌توان به ویژگی‌های مختلفی، از جمله تخصیص حافظه پویا (Dynamic Memory Allocation)، افزودن، جستجو و مرتب‌سازی آیتم‌ها دسترسی داشت. به منظور درک بهتر تفاوت Array با ArrayList، برخی از نقاط تمایز آن‌ها در ادامه فهرست شده است:

  • زمان تعریف یک آرایه، اندازه آیتم‌ها ثابت است، بنابراین تخصیص حافظه نیز ثابت خواهد بود. اما در مورد ArrayList، این اندازه به را می‌توان به صورت پویا اضافه کرد یا کاهش داد.
  • آرایه به فضای نام system.array تعلق دارد، اما ArrayList متعلق به فضای نام system.collection است.
  • تمام آیتم‌های موجود در آرایه از یک نوع داده یکسان هستند؛ در حالی که مقادیر یک ArrayList می‌توانند از یک نوع داده یکسان یا از نوع داده‌های متفاوتی باشند.
  • آرایه‌ها در سی شارپ امکان پذیرش مقادیر Null را ندارند، ولی ArrayList می‌تواند مقدار Null را بپذیرد.

برای درک بهتر تفاوت Array با ArrayList در سی شارپ ، مثالی در ادامه آمده است:

// C# program to illustrate the ArrayList
using System;
using System.Collections;
 
class IB {
 
   // Main Method
   public static void Main(string[] args)
   {
 
       // Create a list of strings
       ArrayList al = new ArrayList();
       al.Add("Bruno");
       al.Add("Husky");
       al.Add(10);
       al.Add(10.10);
 
       // Iterate list element using foreach loop
       foreach(var names in al)
       {
           Console.WriteLine(names);
       }
   }
}

وراثت در سی شارپ به چه معناست و آیا C#‎ از وراثت چندگانه پشتیبانی می‌کند؟

در زبان برنامه نویسی سی شارپ، وراثت به معنی کسب برخی از خصلت‌ها (Property) از یک کلاس Master است. برای درک بهتر تعریف وراثت چندگانه، به مثال زیر توجه شود.

وراثت چندگانه در #C

در تصویر فوق، کلاس C می‌تواند خصلت‌های کلاس A و کلاس B را به ارث ببرد. در ادامه به یک نمونه کاربردی از مفهوم وراثت در سی شارپ پرداخته می‌شود. با کمک قطعه کد زیر، می‌توان مفاهیم ارث‌بری را بهتر فرا گرفت:

// C# program to illustrate
// multiple class inheritance
using System;
using System.Collections;

// Parent class 1
class Scaler {

  // Providing the implementation
  // of features() method
  public void features()
  {

      // Creating ArrayList
      ArrayList My_features= new ArrayList();

      // Adding elements in the
      // My_features ArrayList
      My_features.Add("Abstraction");
      My_features.Add("Encapsulation");
      My_features.Add("Inheritance");

      Console.WriteLine("Features provided by OOPS:");
      foreach(var elements in My_features)
      {
          Console.WriteLine(elements);
      }
  }
}

// Parent class 2
class Scaler2 :Scaler{

  // Providing the implementation
  // of courses() method
  public void languages()
  {

      // Creating ArrayList
      ArrayList My_features = new ArrayList();

      // Adding elements in the
      // My_features ArrayList
      My_features.Add("C++");
      My_features.Add("C#");
      My_features.Add("JScript");
     

      Console.WriteLine("\nLanguages that use OOPS concepts:");
      foreach(var elements in My_features)
      {
          Console.WriteLine(elements);
      }
  }
}

// Child class
class ScalertoScaler : Scaler2 {
}

public class Scaler1 {

  // Main method
  static public void Main()
  {

      // Creating object of ScalertoScaler class
      ScalertoScaler obj = new ScalertoScaler();
      obj.features();
      obj.languages();
  }
}

آیا در سی شارپ امکان اجرای چند بلوک Catch وجود دارد؟

خیر، در سی شارپ نمی‌توان چند بلوک Catch از نوع یکسان را اجرا کرد. زمانی که کد Catch مناسب اجرا می‌شود، کنترل به بلوک نهایی انتقال پیدا می‌کند. پس از آن، کدی اجرا خواهد شد که بعد از بلوک نهایی قرار آمده است.

آیا امکان استفاده از کلمه کلید this درون یک متد ایستا وجود دارد؟

نمی‌توان از «this» در یک متد ایستا (Static Method) استفاده کرد. زیرا کلمه کلیدی this یک منبع را به نمونه فعلی از کلاسی که شامل آن است باز می‌گرداند. متدهای ایستا (یا هر عضو ایستای دیگری) به یک نمونه خاص تعلق ندارند. آن‌ها بدون ایجاد یک نمونه از کلاس وجود دارند. متدهای ایستا نه به وسیله نمونه کلاس، بلکه به همراه نام کلاس فراخوانی می‌شوند.

اگرچه در مورد متدهای افزونه (Extension Methods)، می‌توان از پارامترهای تابع استفاده کرد. کلمه کلیدی this در C#‎ یک نوع خاص از متغیرهای منبع به حساب می‌آید که به طور ضمنی در داخل هر سازنده و متد غیر ایستا به عنوان اولین پارامتر از نوع کلاسی تعریف می‌شود که در آن کلاس توصیف شده است. اکنون در بخش بعدی مقاله سوالات مصاحبه C#‎ برخی از سوالات رایج مصاحبه سی شارپ در سطح پیشرفته پاسخ داده شده‌اند.

سوالات مصاحبه برنامه نویسی #C در سطح پیشرفته

در این بخش از مقاله «مصاحبه سوالات برنامه نویسی #C»، به آن دسته از سوالات مصاحبه برنامه نویسی سی شارپ پرداخته شده است که درجه سختی آن‌ها در سطح پیشرفته است.

کنترل سفارشی و کنترل کاربر در سی شارپ چیست ؟

کنترل‌های سفارشی (Custom) آن دسته از کنترل‌هایی هستند که به عنوان کد کامپایل شده (Dlls) تولید می‌شوند. استفاده از کنترل‌های سفارشی آسان است و امکان اضافه کردن آن‌ها به جعبه ابزار (Toolbox) نیز وجود دارد. توسعه دهندگان می‌توانند با گرفتن و رها کردن، این کنترل‌ها را به فرم‌های وب خود اضافه کنند. امکان اضافه کردن صفت‌ها در زمان طراحی وجود دارد.

می‌توان کنترل‌های سفارشی را به راحتی به چندین اپلیکیشن مختلف اضافه کرد؛ البته این در شرایطی است که کد کامپایل شده به صورت اشتراک‌گذاری شده باشد. در صورتی که کنترل‌های سفارشی به صورت خصوصی باشند، می‌توان آن‌ها را در مسیر bin مربوط به وب اپلیکیشن کپی کرد و پس از آن می‌توان مرجع اضافه و از این کنترل‌ها استفاده کرد.

مصاحبه برای برنامه نویسی سی شارپ

کنترل‌های کاربر بسیار به فایل‌های ASP Include شبیه هستند و ایجاد آن‌ها به راحتی انجام می‌شود. کنترل‌های کاربر قابلیت قرار گرفتن در Toolbox و درگ و دراپ شدن از آن را ندارند. این نوع از کنترل‌ها Code Behind و طراحی خود را دارند. منظور از Code Behind کد مخصوص برای صفحات وب ASP.NET است که به طور جداگانه در یک فایل کلاس نوشته می‌شود. Code Behind این امکان را فراهم می‌کند که جداسازی کدها و منظق کسب و کار به طور واضح و قابل فهم از یکدیگر تمایز داشته باشند. پسوند فایل مورد استفاده برای کنترل‌های کاربر، «ascx» است.

تفاوت System.Array.CopyTo()‎ و System.Array.Clone()‎‏ چیست؟

با استفاده از متد Clone()‎، یک شی آرایه‌ جدید ساخته می‌شود که حاوی تمام عناصر آرایه اصلی است و از متُد CopyTo‎‎‎()‎ می‌کند. به این ترتیب، تمام عناصر موجود در یک آرایه، در یک آرایه موجود دیگر کپی می‌شوند. هر دوی این متدها عمل کپی ‌Shallow را انجام می‌دهند. باید توجه کرد که با استفاده از متد CopyTo()‎ می‌توان به عناصری که در حال حاضر در آرایه مد نظر وجود دارند، تعدادی عنصر دیگر اضافه کرد، در صورتی که با استفاده از متد Clone()‎ یک نسخه کپی گرفته می‌شود.

تفاوت بین دو متد Finalize()‎ و Dispose()‎ چیست؟

Dispose()‎ زمانی فراخوانی می‌شود که لازم باشد آزادسازی هر گونه منبع مدیریت نشده همراه با شی انجام شود. با وجود اینکه متد Finalize()‎ نیز به همین منظور به کار می‌رود، اما با کمک این متد اطمینان از فرآیند Garbage Collection شی مورد نظر حاصل نمی‌شود.

سوال های مصاحبه برنامه نویسی سی شارپ

منظور از Property در سی شارپ چیست؟

خصلت (خصوصیت | Property) در C#‎، اعضای عمومی یک کلاس است که با استفاده از آن، امکان دسترسی به اعضای خصوصی یک کلاس فراهم می‌شود. به واسطه قانون پایه کپسوله‌سازی (Encapsualtion)، امکان مخفی کردن برخی از خصلت‌های حساس از دید کاربر وجود دارد. این امر توسط ایجاد متغیرهای خصوصی انجام می‌شود. باید توجه کرد که امکان دسترسی به اعضای خصوصی به طریق دیگری وجود ندارد.

بنابراین، با کمک Propertyها در C#‎ می‌توان به راحتی به اعضای خصوصی دسترسی داشت و مقادیر آن‌ها را تعیین کرد. مقادیر به سادگی از طریق Accessorها یعنی دو متد set و get، امکان‌پذیر است. به طوری که با کمک متد get مقدار استخراج می‌شود و متد set مقدار مربوطه را به متغیرها اختصاص می‌دهد.

Object Pool در ‎.NET چیست؟

Object Pool یک نگهدارنده است که درون خود اشیایی آماده استفاده دارد. در داخل این نگهدارنده، اشیایی که در زمان حال مورد استفاده قرار می‌گیرند و همچنین، مجموع تعداد اشیا موجود در Pool دنبال می‌شوند.

کلاس‌های جزئی در C#‎ چه هستند؟

کلاس‌های جزئی (Partial) نقش پیاده‌سازی کارکرد یک کلاس واحد به چندین فایل را دارند. این فایل‌های مختلف در زمان کامپایل در قالب یک فایل ادغام می‌شوند. برای ساخت کلاس‌های جزئی، می‌توان از کلمه کلیدی «partial» استفاده کرد. به منظور درک بهتر ساختار کلی کلاس‌های partial، به کد زیر توجه شود:

public partial Clas_name  
{
       // code
}

نکته حائز اهمیت این است که می‌توان به راحتی کارکردهای متدها، اینترفیس‌ها یا ساختارها را به چندین فایل مختلف تقسیم کرد. علاوه بر این، امکان اضافه کردن کلاس‌های جزئی تودرتو (Nested) نیز وجود دارد.

تفاوت میان انقیاد دیرهنگام و انقیاد زودهنگام چیست؟

انقیاد دیرهنگام (Late Binding) و زودهنگام نمونه‌هایی از مفاهیم اولیه شی‌گرایی هستند. در واقع، این دو نوع انقیاد مثال‌هایی از مفهوم چندریختی (Polymorphism) به حساب می‌آیند. به عنوان مثال، یک تابع calculateBill()‎ بر اساس سیاست‌های مختلف، صورتحساب‌های مربوط به مشتریان ویژه، مشتریان عادی و مشتریان نیمه ویژه (Semi-Premium) را محاسبه می‌کند. محاسبات مربوط به شی‌های مشتریان با استفاده از یک تابع یکسان و در عین حال، به نوع‌های مختلفی انجام می‌شوند؛ به چنین فرآیندی اصطلاحاً «چندریختی» گفته می‌شود. نکته بسیار مهم این است که مفاهیم چندریختی اساساً در شی‌گرایی و این گروه از زبان‌های برنامه نویسی، از اهمیت بالایی برخوردار هستند.

مصاحبه سی شارپ

در زبان برنامه نویسی سی شارپ، زمانی که یک شی به یک متغیر (نوع شی) تخصیص داده می‌شود، عمل پیوند یا همان انقیاد، توسط فریم ورک NET. انجام می‌شود. در ادامه، هنگامی که در زمان کامپایل عمل انقیاد انجام می‌شود، آن را با نام انقیاد زودهنگام در نظر می‌گیرند. این نوع از انقیاد به منظور جستجو دقیق و بررسی کردن متدها و خصوصیت‌های اشیای ایستا به کار می‌رود. با استفاده از انقیاد زودهنگام، تعداد خطاهای زمان اجرا به صورت قابل توجهی کاهش می‌یابند و عمل اجرا کاملاً سریع انجام خواهد شد. حال این سوال پیش می‌آید که انقیاد دیرهنگام به چه شکل است؟

هنگامی که عمل انقیاد یا پیوند در زمان اجرا اتفاق بیوفتد، آنگاه آن پیوند به عنوان انقیاد دیرهنگام شناخته می‌شود. انقیاد دیرهنگام زمانی رخ می‌دهد که در زمان اجرا، اشیا به صورت پویا باشند. یعنی تصمیم‌گیری در مورد این اشیا بر اساس داده‌هایی است که نگهداری می‌کنند. عملکرد انقیاد دیرهنگام نسب به انقیاد زودهنگام کند‌تر است. به این دلیل که این نوع از پیوند در طول زمان اجرا انجام می‌شود.

فهرستی از رایج‌ترین نوع‌های استثناها در ‎.NET‎ چه هستند؟

در ادامه برخی از مرسوم‌ترین استثناعات (Exceptions) موجود در دات نت فهرست شده‌اند:

  • ArgumentException
  • ArgumentNullException
  • ArgumentOutOfRangeException
  • ArithmeticException
  • DivideByZeroException
  • OverflowException
  • IndexOutOfRangeException
  • InvalidCastException
  • InvalidOperationException
  • IOEndOfStreamException
  • NullReferenceException
  • OutOfMemoryException
  • StackOverflowException

استثناهای سفارشی در C#‎ به چه معنا است؟

در برخی از مواقع، خطاهایی وجود دارند که باید به طور اختصاصی، به عنوان نیازمندی‌های هر کاربر، رسیدگی و مدیریت شوند. در چنین شرایطی، استثناعات سفارشی (Custom Exception) برای این امر به کار می‌روند.

Delegate در سی شارپ چیست ؟

Delegateها مشابه اشاره‌گر (Pointer) تابع در سی‌پلاس‌پلاس (++C) است، با این تفاوت که برخلاف اشاره‌گرها، دلگیت‌ها ایمنی نوع هستند. Delegateها ضروری به حساب می‌آیند، چون از آن‌ها به منظور نوشتن توابع ایمن نوع ژنریک استفاده می‌شود.

ارث‌بری یک کلاس به یک کلاس دیگر در C#‎ چگونه انجام می‌شود؟

در سی شارپ برای عملیات ارث‌بری از علامت «:» و سپس نام کلاس استفاده می‌شود. به عنوان مثال، با دستور زیر عملیات ارث‌بری انجام می‌شود:

public class DerivedClass : BaseClass

نام این کلاسی در C#‎ که تمام کلاس‌ها از آن مشتق می‌شوند چیست؟

در سی شارپ، کلاس شی (Object Class) به عنوان کلاس پایه برای تمام کلاس‌ها به حساب می‌آید. این کلاس در فضای نام سیستم (System Namespace) حضور دارد.

منظور از آرایه‌ها در C#‎ چیست ؟

زمانی که گروهی از المان‌های مشابه در قالب یک اسم خاص در کنار یک دیگر قرار داده می‌شوند، آنگاه این ساختار حاصل شده با نام آرایه شناخته می‌شود. برای درک بهتر نحوه تعریف آرایه و مقداردهی به آن، لازم است به مثال زیر به عنوان یک راهنما توجه شود:

Atea[4]: [green tea, chamomile tea, black tea, lemon tea]

خط کد فوق ساختار یک آرایه را نمایش می‌دهد که ۴ عنصر دارد و در آن نوع‌های مختلف چای وجود دارد. در حقیقت طول آرایه بیان‌گر تعداد عناصر موجود در آن آرایه است. در سی شارپ، عمل تخصیص حافظه به آرایه‌ها به صورت پویا انجام می‌شود. در ادامه نحوه ذخیره‌سازی مقادیر در آرایه به صورت متوالی نمایش داده می‌شود.

آرایه در سی شارپ

برخی از نکات مهم مربوط به آرایه‌ها در سی شارپ فهرست شده‌اند:

  • همان‌طور که پیش‌تر به آن پرداخته شد، عمل تخصیص حافظه در آن به صورت پویا یا همان داینامیک است.
  • در سی شارپ آرایه‌ها به عنوان شی در نظر گرفته می‌شوند.
  • می‌توان به راحتی طول آرایه را از طریق تعداد اعضای موجود در آن آرایه تشخیص داد.
  • اعضای آرایه به ترتیب قرار داده شده‌اند و اندیس‌گذاری آن‌ها با «صفر» آغاز می‌شود.
  • نوع‌‌های آرایه، نوع رفرنسی هستند که از نوع آرایه پایه مشتق شده‌اند. یه منظور درک بهتر، به سینتکس زیر توجه شود.
< Data Type > [ ] < Name_Array >

اندیس‌گذار در سی شارپ چیست؟

اندیس‌گذارها (Indexterها) با نام آرایه‌های هوشمند شناخته می‌شوند و به واسطه آن‌ها، امکان دسترسی به یک متغیر عضو فراهم خواهد شد. اندیس‌گذارها با استفاده از کلمه کلیدی «Indexter» ایجاد می‌شوند و اعضای ایستا به حساب نمی‌آیند. به منظور آشنایی بیش‌تر با ساختار کلی اندیس‌گذارها، به قطعه کد زیر توجه شود:

<return type> this[<parameter type> index]
{
   get{
       // return the value from the specified index of an internal collection
   }
   set{
       // set values at the specified index in an internal collection
   }
}

تفاوت میان عملگر تساوی (==) و متد Equals()‎ در زبان C#‎ چیست؟

با وجود اینکه هم عملگر تساوی و هم متد ()Equals برای مقایسه دو شی، از طریق مقدار آن‌ها به کار می‌روند، اما نحوه استفاده از آن‌ها با یکدیگر تفاوت دارند. به مثال زیر توجه شود:

int x = 10;
int y = 10;
Console.WriteLine( x == y);
Console.WriteLine(x.Equals(y));
Output:
True
True

عملگر تساوی (==) یک نوع رفرنس است و در صورت استفاده، تنها زمانی مقدار True را‎ برمی‌گرداند که هر دوی رفرنس‌ها به یک شی یکسان اشاره کنند. متد Equals()‎ برای مقایسه مقدارهایی به کار می‌رود که توسط اشیا جا به جا می‌شوند. مثلاً در مثال فوق عدد ۱۰ به عنوان مقدار به دو متغیر x و y داده شده است. اگر مقایسه x==y انجام شود، آنگاه مقادیر جا به جا شده توسط x و y مقایسه خواهند شد. در چنین شرایطی، به دلیل تساوی میان مقدارهای این دو متغیر، متد Equals()‎ مقدار True را در خروجی نشان می‌دهد.

علاوه بر نکات مذکور، باید توجه کرد که عملگر تساوی عمل مقایسه را از طرق رفرنس انجام می‌دهد، در حالی که در متد Equals()‎ این کار را با استفاده از مقدار (Value) انجام می‌شود.

چه روش‌های مختلفی برای سربارگذاری متدها در C#‎ وجود دارد؟

مفهوم سربارگذاری (Overloading) متد در سی شارپ یعنی شرایطی که در آن متد با یک نام یکسان استفاده شود، اما بر اساس زمینه (Context) مورد استفاده، مقادیر مختلفی را جا به جا کند. تنها متدی که در آن قابلیت سربارگذاری وجود ندارد، متد main()‎ است. به منظور سربارگذاری متدها در سی شارپ، یکی از موارد زیر ضروری هستند:

  • تغییر تعداد پارامترهای یک متد
  • تغییر ترتیب پارامترهای یک متد
  • استفاده از نوع‌های داده مختلف برای پارامترها

با استفاده از روش‌های فوق، می‌توان به سادگی یک متد را چندین بار سربارگذاری کرد. برای آشنایی هر چه بیش‌تر با این مفاهیم، به مثال زیر توجه شود:

public class Area {
   public double area(double x) {
       double area = x * x;
       return area;
   }
   public double area(double a, double b) {
       double area = a * b;
       return area;
   }
}

در قطعه کد فوق، متد Area دو بار مورد استفاده قرار گرفته است. در اعلان اول این متد، یک آرگومان به کار رفته و در اعلان دوم، از دو آرگومان استفاده شده است. بنابراین، در این مثال با به کارگیری پارامترهای مختلف در یک متد یکسان، امکان سربارگذاری متد ()Area به وجود آمد.

تفاوت میان یک Struct و یک کلاس در C#‎ چیست؟

در ادامه، برخی از تفاوت‌های مهم بین Struct و کلاس فهرست شده‌اند:

  • Structها متغیرهای نوع مقداری هستند، اما کلاس‌ها از نوع‌های رفرنسی به حساب می‌آیند.
  • Structها در پشته (Stack) ذخیره می‌شوند و باعث ایجاد یک سربار اضافه می‌شوند و در عین حال بازیابی آن‌ها سریع‌تر است.
  • Structها قابلیت ارث‌بری را ندارند، در حالی که کلاس‌ها از این ویژگی برخوردار هستند.

منظور از رفلکشن در C#‎ چیست ؟

Reflection در سی شارپ به منظور استخراج «فراداده» (Metadata) از نوع‌های داده، در حین زمان اجرا به کار می‌رود. برای اضافه کردن Reflection در فریم ورک NET.، می‌توان به سادگی از فضای نام System.Refelction در برنامه استفاده کرد. بدین طریق، می‌توان هر نوع خاصی از داده‌ها را بازیابی کرد. در ادامه انواع این داده‌های قابل بازیابی فهرست شده‌اند:

  • اسمبلی (Assembly)
  • ماژول (Module)
  • نوع شمارشی (Enum)
  • MethodInfo
  • ConstructorInfo
  • MemberInfo
  • ParameterInfo
  • نوع (Type)
  • FieldInfo
  • EventInfo
  • PropertyInfo

تفاوت میان Constant و Read Only در سی شارپ چیست؟

در زبان برنامه نویسی سی شارپ، کلمه کلیدی «const» برای تعریف یک فیلد ثابت در برنامه استفاده می‌شود. در حقیقت، زمانی که یک متغیر به عنوان const تعریف می‌شود، امکان تغییر مقدار آن در کل برنامه وجود ندارد. در سی شارپ، نوع ثابت می‌تواند مقادیر عددی، رشته، رفرنس Null و بولی (Boolean) باشد. در ادامه یک مثال ساده از آن به همراه خروجی قطعه کد ارائه شده است.

class IB {
 
   // Constant fields
   public const int xvar = 20;
   public const string str = "InterviewBit";
 
   // Main method
   static public void Main()
   {
 
       // Display the value of Constant fields
       Console.WriteLine("The value of xvar: {0}", xvar);
       Console.WriteLine("The value of str: {0}", str);
   }
}
Output:
The value of xvar is 20.
The value of string is Interview Bit

از سوی دیگر، با استفاده از کلمه کلیدی «readonly»، در دو حالت می‌توان به متغیر مقدار تخصیص داد:

  • زمانی که متغیر اعلان یا همان تعریف شده است.
  • هنگامی که متغیر در یک سازنده (Constructor) از یک کلاس یکسان تعریف شده است.

برای قابل فهم‌تر شدن مفاهیم مربوط به Read Only، در ادامه یک مثال کاربردی از آن ارائه شده است:

public readonly int xvar1;
   public readonly int yvar2;
 
   // Values of the readonly 
   // variables are assigned
   // Using constructor
   public IB(int b, int c)
   {
 
       xvar1 = b;
       yvar2 = c;
       Console.WriteLine("The value of xvar1 {0}, "+
                       "and yvar2 {1}", xvar1, yvar2);
   }
 
   // Main method
   static public void Main()
   {
     IB obj1 = new IB(50, 60);
   }
}

Output:
The value of xvar1 is 50, and yvar2 is 60

به بیان ساده، ثابت‌ها به طور پیش‌فرض استاتیک هستند، در حالی که مقدار به Readonly زمانی تخصیص پیدا می‌کند که در سازنده تعریف بشود. علاوه بر این، می‌توان ثابت‌ها را درون توابع مختلف اعلان کرد، اما Modifierهای readonly تنها به همراه نوع‌های رفرنس قابل استفاده هستند.

نوع شمارشی در سی شارپ چیست؟

در سی شارپ، نوع شمارشی (Enum) یک نوعِ مقداری است که معمولاً همراه با یک مجموعه از ثابت‌های نامگذاری شده مرتبط، به عنوان لیست شمارشی در نظر گرفته می‌شود. به منظور اعلان یک نوع شمارشی، کلمه کلیدی «enum» به کار می‌رود. Enum به عنوان یک نوع داده اولیه شناخته می‌شود که امکان تعریف کردن آن توسط کاربر وجود دارد.

نوع Enum می‌تواند به صورت عدد صحیح، بایت، ممیز شناور، Double و سایر موارد باشد. در صورت استفاده از آن در کنار Int، لازم است عمل Cast شدن انجام شود. می‌توان Enum را برای ایجاد ثابت‌های عددی در فریم ورک دات نت استفاده کرد. تمام اعضای یک Enum، از نوع Enum هستند. لازم است برای هر یک از نوع‌های Enum یک مقدار عددی وجود داشته باشد.

به طور پیش‌فرض، نوع بنیادی المان شمارشی Int، اولین شمارنده دارای مقدار صفر و همچنین، مقدار هر یک از شمارنده‌های بعدی به طور افزایشی یکی یکی زیاد می‌شوند. برای درک بهتر، به ساختار نوع شمارشی زیر توجه شود:

enum Dow {Sat, Sun, Mon, Tue, Wed, Thu, Fri};   

در ادامه برخی از نکات مهم مرتبط با Enum فهرست شده‌اند:

  • Enumها نوع‌های داده شمارشی در سی شارپ به حساب می‌آیند.
  • Enumها عملاً برای کاربران کارایی ندارد، بلکه برای برنامه نویسان طراحی شده‌‌اند.
  • Enumها ثابت نوعی قوی (Strongly Typed Constant) به شمار می‌روند. یعنی، ممکن است یک نوع خاصی از Enum به طور ضمنی به یک Enum دیگر تخصیص داده نشود. این شرایط حتی اگر مقدار بنیادی اعضای آن‌ها یکسان باشند نیز، همچنان صادق است.
  • نوع شمارشی، خوانایی کدها را بهبود می‌بخشد، به طوری که امکان درک آن‌ها به بهترین شکل ممکن فراهم می‌شود.
  • مقادیر Enum ثابت هستند. می‌توان آن‌ها را به عنوان رشته نمایش داد یا به صورت عدد صحیح پردازش کرد.
  • با توجه به اینکه هر نوع Enum به طور خودکار از System.Enum مشتق شده است، بنابراین می‌توان متدهای System.Enum را در Enumها استفاده کرد.
  • Enumها نوع‌های مقداری هستند و در پشته (Stack) ایجاد می‌شوند. بنابراین، باید توجه داشت این نوع شمارشی در Heap ساخته نخواهد شد.

تفاوت دو کلاس String و StringBuilder در سی شارپ چیست؟

در این بخش از بررسی سوالات مصاحبه برنامه نویسی #C ، برخی از شاخص‌ترین تفاوت‌های بین دو کلاس String و StringBuilder فهرست شده‌اند:

  • تفاوت عمده کلاس String و StringBuilder این است که اشیای String تغییرناپذیر هستند، اما در صورت استفاده از StringBuilder، یک رشته تغییرپذیر از کاراکترها ایجاد می‌شود.
  • کلاس StringBuilder به جای ایجاد یک شی جدید، تغییرات را روی شی موجود اعمال می‌کند.
  • کلاس StringBuilder همه فرآیند اعمال تغییرات روی شی رشته موجود را تسهیل و سادگی می‌بخشد. با توجه به اینکه کلاس String تغییرناپذیر است، ساخت شی جدید برای اعمال تغییرات، مقرون به صرفه نخواهد بود. به همین دلیل، با استفاده از کلاس StringBuilder امکان فراخوانی از طریق فضای نام System.Text فراهم می‌شود.
  • در صورتی که یک شی رشته در طول کل برنامه دست خوش تغییری نباشد، می‌توان از کلاس String استفاده کرد. اما در غیر این صورت، لازم است کلاس StringBuilder به کار برود.

حال به منظور درک بهتر نقاط تمایز دو کلاس String و StringBuilder در سی شارپ، لازم است به مثال‌های زیر توجه شود:

string s = string.Empty; 
for (i = 0; i < 1000; i++) 
  { 
    s += i.ToString() + " "; 
  }

در قطعه کد فوق، لازم است ۲۰۰۱ شی ایجاد شوند که از میان آن‌ها ۲۰۰۰ شی بدون استفاده خواهند بود. در ادامه همین تکه کد از طریق کلاس StringBuilder مورد بررسی قرار می‌گیرد:

StringBuilder sb = new StringBuilder(); 
for (i = 0; i < 1000; i++) 
 { 
   sb.Append(i); sb.Append(' '); 
 }

علاوه بر نکات ذکر شده، در مثال فوق با استفاده از کلاس StringBuilder، تخصیص‌دهنده حافظه نیز در شرایط مساعدتری عمل می‌کند.

مسئله‌های کدنویسی سوالات مصاحبه برنامه نویسی #C

در این بخش از بررسی سوالات مصاحبه برنامه نویسی #C ، به برخی از پرسش‌های تخصصی مربوط به کدنویسی با این زبان برنامه نویسی پرداخته می‌شود. می‌توان با کمک این بخش از مطلب، مسائل پراهمیت در برنامه نویسی سی شارپ را فرا گرفت و از آن به عنوان یک راهنمای جامع برای استخدام استفاده کرد.

برنامه‌ای که یک رشته را در C#‎ معکوس کند چگونه نوشته می‌شود؟

با استفاده از زبان برنامه نویسی سی شارپ، برنامه‌ای بنویسید که یک رشته را معکوس کند.

internal static void ReverseString(string str) 
{ 
   
  char[] charArray = str.ToCharArray(); 
  for (int i = 0, j = str.Length - 1; i < j; i++, j--) 
  { 
      charArray[i] = str[j]; 
      charArray[j] = str[i]; 
  } 
  string reversedstring = new string(charArray); 
  Console.WriteLine(reversedstring); 

معکوس کردن ترتیب کلمه‌ها در C#‎ چگونه انجام می‌شود؟

با زبان برنامه نویسی سی شارپ، برنامه‌ای بنویسید که ترتیب کلمه‌های داده شده را معکوس کند.

internal static void ReverseWordOrder(string str) 
{ 
  int i; 
  StringBuilder reverseSentence = new StringBuilder(); 
   int Start = str.Length - 1; 
  int End = str.Length - 1; 
   while (Start > 0) 
  { 
      if (str[Start] == ' ') 
      { 
          i = Start + 1; 
          while (i <= End) 
          { 
              reverseSentence.Append(str[i]); 
              i++; 
          } 
          reverseSentence.Append(' '); 
          End = Start - 1; 
      } 
      Start--; 
  } 
   for (i = 0; i <= End; i++) 
  { 
      reverseSentence.Append(str[i]); 
  } 
  Console.WriteLine(reverseSentence.ToString()); 
}

بررسی پالیندروم بودن یک رشته کاراکتر در C#‎

با استفاده از C#‎ برنامه‌ای بنویسید که پالیندروم بودن رشته داده شده را تشخیص دهد. پالیندروم به کلمه، رشته یا اعدادی گفته می‌شود که از دو طرف (راست به چپ و چپ به راست) دقیقاً به یک شکل خوانده می‌شوند.

internal static void chkPalindrome(string str) 
{ 
   bool flag = false; 
   for (int i = 0, j = str.Length - 1; i < str.Length / 2; i++, j--) 
   { 
       if (str[i] != str[j]) 
       { 
           flag = false; 
           break; 
       } 
       else 
           flag = true; 
   } 
   if (flag) 
   { 
       Console.WriteLine("Palindrome"); 
   } 
   else 
       Console.WriteLine("Not Palindrome");

خروجی قطعه کد فوق به صورت زیر است:

Input: Key Output: Not Palindrome
Input: step on no pets Output: Palindrome

برنامه پیدا کردن زیررشته خاصی از یک رشته در C#‎

با استفاده از سی شارپ برنامه‌ای بنویسید که از رشته داده شده زیررشته را پیدا کند.

internal static void findallsubstring(string str) 
{ 
   for (int i = 0; i < str.Length; ++i) 
   { 
       StringBuilder subString = new StringBuilder(str.Length - i); 
       for (int j = i; j < str.Length; ++j) 
       { 
           subString.Append(str[j]); 
           Console.Write(subString + " "); 
       } 
   } 
}

بررسی اول بودن یک عدد صحیح مثبت در C#‎

با استفاده از زبان برنامه نویسی سی شارپ، برنامه‌ای بنویسید که تشخیص دهد یک عدد صحیح مثبت اول است یا خیر.

static void Main(string[] args) 
{ 
    if (FindPrime(47)) 
    { 
        Console.WriteLine("Prime"); 
    } 
    else 
    { 
        Console.WriteLine("Not Prime"); 
    } 
    Console.ReadLine(); 
}   
internal static bool FindPrime(int number) 
{ 
    if (number == 1) return false; 
    if (number == 2) return true; 
    if (number % 2 == 0) return false; 
     var squareRoot = (int)Math.Floor(Math.Sqrt(number)); 
     for (int i = 3; i <= squareRoot; i += 2) 
    { 
        if (number % i == 0) return false; 
    } 
     return true; 
}

سوالات مصاحبه برنامه نویسی #C کوتاه

این بخش از راهنمای آشنایی با سوالات مصاحبه سی شارپ به بررسی سوالاتی اختصاص داده شده است که پاسخ آن‌ها کوتاه است و معمولاً به صورت چهارگزینه‌ای در آزمون‌های کتبی مطرح می‌شوند.

کاربرد تبدیل نوع داده در زبان برنامه نویسی #C چیست ؟

از تبدیل نوع داده (Conversion of data type) در #C برای جلوگیری از بروز شرایطی استفاده می‌شود که در طول تغییر یا تبدیل نوع داده، خطای زمان اجرا رخ می‌دهد.

انواع تبدیل داده در زبان #C کدامند؟

انواع تبدیل داده (Data Conversion) در #C به دو نوع «تبدیل ضمنی» (Implicit Conversion) و «تبدیل غیرضمنی» (Explicit Conversion) تقسیم می‌شود.

زیر مجموعه‌های نوع داده Int در C#‎ کدامند؟

انواع داده‌ای که در زبان C#‎ از نوع عدد صحیح (Integer) هستند، شامل انواع داده Long ،Float و Double است.

خروجی قطعه کد زیر چیست؟

static void Main(string[] args)
{
    int a, b, c, x;
    a = 90;
    b = 15;
    c = 3;
    x = a - b / 3 + c * 2 - 1;
    Console.WriteLine(x);
    Console.ReadLine();
}

خروجی قطعه کد فوق عدد ۹۰ است.

برای تعریف متغیرهای مرجع از چه اصلاح‌گر مرجعی استفاده می‌شود؟

به منظور اعلان یا همان تعریف متغیر مرجع یا همان متغیر Reference از عبارت ref استفاده می‌شود.

خروجی قطعه کد زیر در C#‎ چیست؟

static void Main(string[] args)
{
   int []a = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
   func(ref a);
   Console.ReadLine();
}
static void func(ref int[] x)
{
   Console.Write(" numbers are : ");
   for (int i = 0; i < x.Length; i++)
   {
       if (x[i] % 2 == 0)
       {
           x[i] = x[i] + 1;
           Console.Write(x[i] +" ");
       }
   }
}

قطعه کد فوق در خروجی به ترتیب اعداد زیر را از چپ به راست نمایش می‌دهد:

numbers are : 2 3 4 5 6

خروجی کدهای C#‎ زیر چیست؟

static void Main(string[] args)
  {
      int x = 4 ,b = 2;
      x -= b/= x * b;
      Console.WriteLine(x + " " + b);
      Console.ReadLine();
  }

خروجی کد فوق به صورت زیر است:

4 0

خروجی عبارت زیر در سی شارپ چیست؟

int  a+= (float) b/= (long)c

خروجی این عبارت Int است.

زمانی که متدی انتزاعی در C#‎ توسط یک شی بازتعریف می‌شود باید از چه اصلاح‌گری استفاده کرد؟

در چنین شرایطی باید از توصیفگر Override در سی شارپ استفاده کرد.

نام آن فرآیندی که در آن یک متد خود فراخوانی می‌کند چه نام دارد؟

فرآیند فراخوانی متد از طریق خود آن، با نام بازگشت (Recursion) شناخته می‌شود.

خروجی کد زیر چیست؟

class maths
{
   public int fun(int k, int y)
   {
       return k + y;
   }
   public int fun1(int t, float z)
   {
       return (t+(int)z);
   }
}   
class Program
{
   static void Main(string[] args)
   {
       maths obj = new maths();
       int i;
       int b = 90;
       int c = 100;
       int d = 12;
       float l = 14.78f;
       i = obj.fun(b, c);
       Console.WriteLine(i);
       int j = (obj.fun1(d,  l));
       Console.WriteLine(j);
       Console.ReadLine();
   }
}

خروجی قطعه کد به صورت زیر است:

190, 26

نحوه مرتب‌سازی عناصر آرایه به صورت نزولی چگونه است؟

با استفاده از متد Sort()‎ و به دنبال آن، متد Reverse()‎، می‌توان عناصر آرایه را به طور نزولی مرتب کرد. بخش پایانی مقاله سوالات مصاحبه برنامه نویسی #C به معرفی دوره‌های آموزش سی شارپ فرادرس اختصاص دارد.

معرفی فیلم های آموزش سی شارپ

در این بخش پایانی از مقاله سوالات مصاحبه برنامه نویسی #C ، تعدادی از مهم‌ترین دوره‌های آموزشی مربوط به این زبان برنامه نویسی به طور جامع معرفی شده‌اند.

فیلم آموزش مقدماتی برنامه نویسی سی شارپ (#C)

معرفی آموزش مقدماتی برنامه نویسی سی شارپ C#‎ آموزش مقدماتی برنامه نویسی سی شارپ C#‎

همان‌طور که در پرسش‌های مختلف این مقاله به آن اشاره شد، سی شارپ یک زبان برنامه نویسی کارآمد و مبتنی بر شی‌گرایی است. در دوره آموزش مقدماتی برنامه‌نویسی سی شارپ، ابتدا به مفاهیم پایه این زبان برنامه نویسی پرداخته شده است و در بخش‌های بعدی، مباحث پیشرفته‌ #C آموزش داده خواهند شد. این دوره برای افرادی مناسب است که می‌خواهند یادگیری مهارت برنامه‌نویسی به زبان سی‌شارپ را به صورت جامع و شهودی فرا بگیرند.

طول مدت این دوره آموزشی هشت ساعت و ۱۸ دقیقه و مدرس آن مهندس وحید اسدزاده است. در این دوره آموزشی فرادرس، سرفصل‌هایی مانند مفاهیم اولیه سی‌شارپ، معرفی محیط سی‌شارپ، تعریف متغیر، کار با محیط فرمی و معرفی کنترل‌ها، عبارت‌ها، عملگرها، دستورات شرطی و بسیاری از موارد دیگر به زبان ساده مورد بررسی قرار داده می‌شوند.

فیلم آموزش پروژه محور ASP.NET Core – طراحی سایت رزرو هتل – بخش اول

آموزش پروژه محور ASP.NET Core - طراحی سایت رزرو هتل - بخش یکم

با استفاده از دوره آموزش پروژه محور ASP.NET Core – طراحی سایت رزرو می‌توان زبان برنامه نویسی C#‎ را به صورت کاربردی فرا گرفت. در این دوره آموزشی فرادرس، مخاطبان با تکنولوژی NET Core. آشنا می‌شوند. آن دسته از برنامه نویسان که با نسخه ASP.NET MVC آشنایی دارند، می‌توانند با مشاهده این دوره، مهاجرت از نسخه MVC معمولی به Core MVC را انجام دهند.

طول مدت این دوره آموزشی نزدیک به ۵ ساعت و مدرس آن مهندس علیرضا بهارلوئی است. از جمله سرفصل‌ها و مباحث ارائه شده در این دوره می‌توان به ساخت پایگاه داده با روش Code First، نمایش هتل‌ها روی صفحه اصلی، جستجوی هتل‌ها بر اساس تاریخ، ثبت نظر در جزئیات هتل، پیاده‌سازی درگاه پرداخت و سایر موارد اشاره کرد.

  • برای دیدن فیلم آموزش پروژه محور ASP.NET Core – طراحی سایت رزرو هتل – بخش اول + اینجا کلیک کنید.

فیلم آموزش شی‌ گرایی در سی شارپ (C#‎)

مفاهیم شی‌گرایی نه تنها در زبان برنامه نویسی سی شارپ، بلکه در اغلب زبان‌ها بسیار پراهمیت است. دوره شی‌گرایی در سی‌شارپ (C#‎) فرادرس می‌تواند به عنوان یک منبع آموزشی مناسب برای یادگیری مفاهیم بنیادی شی‌گرایی در این زبان برنامه نویسی به حساب آید. طول مدت این دوره ۱۴ ساعت و مدرس آن مهندس رشید شجاعی است. در این دوره آموزشی، سرفصل‌های پراهمیت مختلفی مانند کلاس‌ها و اشیا، تعیین کننده‌های سطح دسترسی، کپسوله‌سازی، وراثت، واسط، چندریختی و سایر موارد آموزش داده می‌شوند. لازم به ذکر است که برای هر یک از مفاهیم نظری موجود در این دوره، مثال‌های ساده و عملی مختلفی ارائه شده تا به واسطه آن‌ها، مفاهیم مربوطه به بهترین شکل ممکن قابل درک باشند.

فیلم آموزش چارچوب توسعه تحت وب ASP.NET MVC

ASP.NET MVC یک فریم‌ورک توسعه تحت وب است که می‌توان در آن از زبان برنامه نویسی سی شارپ استفاده کرد. در این دوره آموزشی از اصول ابتدایی تا پیشرفته چارچوب توسعه ASP.NET MVC 5 به صورت جامع و قدم به قدم آموزش داده شده‌اند. این فیلم آموزشی فرادرس به گونه‌ای طراحی شده است که برای تمامی افراد در هر سطحی مفید واقع شود. طول مدت این دوره آموزشی نزدیک به ۲۱ ساعت و مدرس آن مهندس نیما مسقدی است.

در این دوره آموزش چاچوب توسعه تحت وب، موضوعات و مباحث مهمی مانند مفاهیم مقدماتی وب و ساختار کلاینت-سروری، پروتکل HTTP و دستورات آن، مفاهیم اولیه برنامه‌نویسی در C#‎، شروع برنامه‌نویسی با ASP.NET MVC 5، مباحث پیشرفته برنامه‌نویسی تحت وب با ASP.NET MVC و سایر موارد مطرح شده‌اند.

فیلم آموزش ساخت بازی با سی شارپ C#‎

یکی از کاربردهای مهم زبان سی شارپ بازی‌سازی است و بدین سبب، یادگیری C#‎ برای افرادی که به این حوزه علاقه‌مند هستند ضروری به نظر می‌رسد. در این دوره آموزشی فرادرس، نحوه ساخت چندین بازی عمومی و ساده با زبان برنامه نویسی سی شارپ به همراه چند مثال آموزش داده خواهد شد. این دوره آموزشی برای افرادی مناسب است که می‌خواهند با به کارگیری جذابیت‌های بازی‌سازی، مفاهیم کلیدی زبان برنامه نویسی سی شارپ را به طور کاربردی و پروژه محور فرا بگیرند.

دوره آموزش ساخت بازی با سی شارپ دارای مدت زمان نزدیک به ۵ ساعت و مدرس آن مهندس رضا خاجوی است. سرفصل‌هایی مانند ساخت بازی دوز، آشنایی با تایمر، ساخت چراغ راهنما، آموزش ساخت فرم ثبت نام در سایت، ساخت بازی حدس تصویر، مسابقه عمل ضرب و شبیه‌سازی عابربانک همگی در این دوره آموزشی مورد بررسی قرار می‌گیرند.

جمع‌بندی

با توجه به مقیاس‌پذیری بالا و سادگی نگهداری و بسیاری از مزیت‌های دیگر زبان برنامه نویسی C#‎ و از سوی دیگر، بازار کار مناسب آن، می‌توان یادگیری برنامه نویسی C#‎ را به عنوان یک مهارت کاربردی و ضروری برای علاقه‌مندان در نظر داشت. در این مقاله، تعدادی از کلیدی‌ترین سوالات مصاحبه برنامه نویسی #C در سطح‌های مقدماتی، متوسط و پیشرفته مورد بررسی قرار داده شدند. افراد می‌توانند با مطالعه این مطلب به عنوان یک راهنمای استخدام جامع، در صدد کسب موقعیت‌های شغلی مناسب و موفقیت‌های پی در پی در آینده کاری خود برآیند.

بر اساس رای ۱۴ نفر
آیا این مطلب برای شما مفید بود؟
شما قبلا رای داده‌اید!
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
Interview Bit C-sharpcorner Guru99
۳ thoughts on “سوالات مصاحبه برنامه نویسی #C — راهنمای استخدام

سلام من یه سوال از برنامه نویسی #C دارم اگه کسی میدونه لظفا جواب بده

سوال : برنامه ای بنویسید که تعداد درس های یک دانشجو را از ورودی دریافت کند سپس نمره و تعداد واحد هر درس را از ورودی دریافت کند و معدل دانشجو را در خروجی نمایش دهد.
برنامه آنقدر تکرار شود تا تعداد درس های داشنجو صفر شود.

الگوریتم و برنامه ای بنویسید که اعداد 4 رقمی فاقد صفر را به همراه تعداد کل آنها نمایش دهد
میشه راهنمایی کنید

سلام
درخصوص یادگیری برنامه نویسی نیاز به مشاوره داشتم.

نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *