سوالات مصاحبه برنامه نویسی #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 ارائه شده است:
1static class classname  
2{  
3  //static data members  
4  //static methods  
5}
  • کلاس جزئی (Partial Class): کلاس جزئی یا همان Partial با استفاده از کلمه کلیدی «partial» تعریف می‌شود و به اعضای خود این امکان را می‌دهد که فایل‌های منبع (‎.cs) را به صورت جزئی تقسیم‌بندی کنند یا به اشتراک بگذارند.
  • کلاس انتزاعی (Abstract Class): این دسته از کلاس‌های سی شارپ در بخش‌هایی که امکان ساخت اشیا نیست، قابلیت نمونه‌برداری شدن ندارند. عملکر کلاس‌های انتزاعی پیرامون مفاهیم شی‌گرایی مربوط به انتزاع است. انتزاع به منظور استخراج جزییات ضروری و در نقطه مقابل، پنهان کردن اطلاعات غیرضروری به کار می‌روند.
  • کلاس مهر و موم شده (Sealed Class): این کلاس‌ها قابلیت به ارث برده شدن را ندارند. با استفاده از کلمه کلیدی «sealed» می‌توان دسترسی کاربران برای به ارث بردن آن کلاس خاص را محدود کرد. به منظور آشنایی با ساختار کلاس مهر و موم شده در ادامه مثالی برای آن ارائه خواهد شد:
1sealed class InterviewBit
2{
3   // data members
4   // methods
5   .
6   .
7   .
8}

مفهوم شی را در 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» به بررسی برخی از کلیدی‌ترین پرسش‌های مقدماتی برنامه نویسی با سی شارپ پرداخته شد.

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

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

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

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

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

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

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

1public abstract class Shape{
2public abstract void draw();
3}

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

1public interface Paintable{
2void paint();
3}

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

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

در ادامه کدهایی برای مثال آمده است:

1void Method(ref int refArgument)
2{
3   refArgument = refArgument + 10;
4}
5int number = 1;
6Method(ref number);
7Console.WriteLine(number);
8// Output: 11

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

1public static string GetNextFeature(ref int id)  
2{  
3   string returnText = "Next-" + id.ToString();  
4   id += 1;  
5   return returnText;  
6}  
7public static string GetNextFeature(out int id)  
8{  
9   id = 1;  
10   string returnText = "Next-" + id.ToString();  
11   return returnText;  
12}   

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

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

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

1// C# program to illustrate the concept
2// of the extension methods
3using System;
4 
5namespace ExtensionMethod {
6static class NewMethodClass {
7 
8   // Method 4
9   public static void M4(this Scaler s)
10   {
11       Console.WriteLine("Method Name: M4");
12   }
13 
14   // Method 5
15   public static void M5(this Scaler s, string str)
16   {
17       Console.WriteLine(str);
18   }
19}
20 
21// Now we create a new class in which
22// Scaler class access all the five methods
23public class IB {
24 
25   // Main Method
26   public static void Main(string[] args)
27   {
28       Scaler s = new Scaler();
29       s.M1();
30       s.M2();
31       s.M3();
32       s.M4();
33       s.M5("Method Name: M5");
34   }
35}
36}

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

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

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

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

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

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

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

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

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

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

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

1GenericList<float> list1 = new GenericList<float>();
2GenericList<Features> list2 = new GenericList<Features>();
3GenericList<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 در سی شارپ ، مثالی در ادامه آمده است:

1// C# program to illustrate the ArrayList
2using System;
3using System.Collections;
4 
5class IB {
6 
7   // Main Method
8   public static void Main(string[] args)
9   {
10 
11       // Create a list of strings
12       ArrayList al = new ArrayList();
13       al.Add("Bruno");
14       al.Add("Husky");
15       al.Add(10);
16       al.Add(10.10);
17 
18       // Iterate list element using foreach loop
19       foreach(var names in al)
20       {
21           Console.WriteLine(names);
22       }
23   }
24}

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

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

برای درک بهتر تعریف وراثت چندگانه، به مثال زیر توجه شود.

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

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

1// C# program to illustrate
2// multiple class inheritance
3using System;
4using System.Collections;
5
6// Parent class 1
7class Scaler {
8
9  // Providing the implementation
10  // of features() method
11  public void features()
12  {
13
14      // Creating ArrayList
15      ArrayList My_features= new ArrayList();
16
17      // Adding elements in the
18      // My_features ArrayList
19      My_features.Add("Abstraction");
20      My_features.Add("Encapsulation");
21      My_features.Add("Inheritance");
22
23      Console.WriteLine("Features provided by OOPS:");
24      foreach(var elements in My_features)
25      {
26          Console.WriteLine(elements);
27      }
28  }
29}
30
31// Parent class 2
32class Scaler2 :Scaler{
33
34  // Providing the implementation
35  // of courses() method
36  public void languages()
37  {
38
39      // Creating ArrayList
40      ArrayList My_features = new ArrayList();
41
42      // Adding elements in the
43      // My_features ArrayList
44      My_features.Add("C++");
45      My_features.Add("C#");
46      My_features.Add("JScript");
47     
48
49      Console.WriteLine("\nLanguages that use OOPS concepts:");
50      foreach(var elements in My_features)
51      {
52          Console.WriteLine(elements);
53      }
54  }
55}
56
57// Child class
58class ScalertoScaler : Scaler2 {
59}
60
61public class Scaler1 {
62
63  // Main method
64  static public void Main()
65  {
66
67      // Creating object of ScalertoScaler class
68      ScalertoScaler obj = new ScalertoScaler();
69      obj.features();
70      obj.languages();
71  }
72}

آیا در سی شارپ امکان اجرای چند بلوک 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، به کد زیر توجه شود:

1public partial Clas_name  
2{
3       // code
4}

نکته حائز اهمیت این است که می‌توان به راحتی کارکردهای متدها، اینترفیس‌ها یا ساختارها را به چندین فایل مختلف تقسیم کرد. علاوه بر این، امکان اضافه کردن کلاس‌های جزئی تودرتو (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#‎ چگونه انجام می‌شود؟

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

1public class DerivedClass : BaseClass

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

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

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

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

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

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

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

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

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

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

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

1<return type> this[<parameter type> index]
2{
3   get{
4       // return the value from the specified index of an internal collection
5   }
6   set{
7       // set values at the specified index in an internal collection
8   }
9}

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

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

1int x = 10;
2int y = 10;
3Console.WriteLine( x == y);
4Console.WriteLine(x.Equals(y));
5Output:
6True
7True

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

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

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

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

به منظور سربارگذاری متدها در سی شارپ، یکی از موارد زیر ضروری هستند:

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

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

1public class Area {
2   public double area(double x) {
3       double area = x * x;
4       return area;
5   }
6   public double area(double a, double b) {
7       double area = a * b;
8       return area;
9   }
10}

در قطعه کد فوق، متد 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) باشد. در ادامه یک مثال ساده از آن به همراه خروجی قطعه کد ارائه شده است.

1class IB {
2 
3   // Constant fields
4   public const int xvar = 20;
5   public const string str = "InterviewBit";
6 
7   // Main method
8   static public void Main()
9   {
10 
11       // Display the value of Constant fields
12       Console.WriteLine("The value of xvar: {0}", xvar);
13       Console.WriteLine("The value of str: {0}", str);
14   }
15}
16Output:
17The value of xvar is 20.
18The value of string is Interview Bit

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

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

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

1public readonly int xvar1;
2   public readonly int yvar2;
3 
4   // Values of the readonly 
5   // variables are assigned
6   // Using constructor
7   public IB(int b, int c)
8   {
9 
10       xvar1 = b;
11       yvar2 = c;
12       Console.WriteLine("The value of xvar1 {0}, "+
13                       "and yvar2 {1}", xvar1, yvar2);
14   }
15 
16   // Main method
17   static public void Main()
18   {
19     IB obj1 = new IB(50, 60);
20   }
21}
22
23Output:
24The value of xvar1 is 50, and yvar2 is 60

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

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

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

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

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

1enum 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 در سی شارپ، لازم است به مثال‌های زیر توجه شود:

1string s = string.Empty; 
2for (i = 0; i < 1000; i++) 
3  { 
4    s += i.ToString() + " "; 
5  }

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

1StringBuilder sb = new StringBuilder(); 
2for (i = 0; i < 1000; i++) 
3 { 
4   sb.Append(i); sb.Append(' '); 
5 }

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

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

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

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

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

1internal static void ReverseString(string str) 
2{ 
3   
4  char[] charArray = str.ToCharArray(); 
5  for (int i = 0, j = str.Length - 1; i < j; i++, j--) 
6  { 
7      charArray[i] = str[j]; 
8      charArray[j] = str[i]; 
9  } 
10  string reversedstring = new string(charArray); 
11  Console.WriteLine(reversedstring); 

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

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

1internal static void ReverseWordOrder(string str) 
2{ 
3  int i; 
4  StringBuilder reverseSentence = new StringBuilder(); 
5   int Start = str.Length - 1; 
6  int End = str.Length - 1; 
7   while (Start > 0) 
8  { 
9      if (str[Start] == ' ') 
10      { 
11          i = Start + 1; 
12          while (i <= End) 
13          { 
14              reverseSentence.Append(str[i]); 
15              i++; 
16          } 
17          reverseSentence.Append(' '); 
18          End = Start - 1; 
19      } 
20      Start--; 
21  } 
22   for (i = 0; i <= End; i++) 
23  { 
24      reverseSentence.Append(str[i]); 
25  } 
26  Console.WriteLine(reverseSentence.ToString()); 
27}

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

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

1internal static void chkPalindrome(string str) 
2{ 
3   bool flag = false; 
4   for (int i = 0, j = str.Length - 1; i < str.Length / 2; i++, j--) 
5   { 
6       if (str[i] != str[j]) 
7       { 
8           flag = false; 
9           break; 
10       } 
11       else 
12           flag = true; 
13   } 
14   if (flag) 
15   { 
16       Console.WriteLine("Palindrome"); 
17   } 
18   else 
19       Console.WriteLine("Not Palindrome");

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

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

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

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

1internal static void findallsubstring(string str) 
2{ 
3   for (int i = 0; i < str.Length; ++i) 
4   { 
5       StringBuilder subString = new StringBuilder(str.Length - i); 
6       for (int j = i; j < str.Length; ++j) 
7       { 
8           subString.Append(str[j]); 
9           Console.Write(subString + " "); 
10       } 
11   } 
12}

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

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

1static void Main(string[] args) 
2{ 
3    if (FindPrime(47)) 
4    { 
5        Console.WriteLine("Prime"); 
6    } 
7    else 
8    { 
9        Console.WriteLine("Not Prime"); 
10    } 
11    Console.ReadLine(); 
12}   
13internal static bool FindPrime(int number) 
14{ 
15    if (number == 1) return false; 
16    if (number == 2) return true; 
17    if (number % 2 == 0) return false; 
18     var squareRoot = (int)Math.Floor(Math.Sqrt(number)); 
19     for (int i = 3; i <= squareRoot; i += 2) 
20    { 
21        if (number % i == 0) return false; 
22    } 
23     return true; 
24}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

numbers are : 2 3 4 5 6

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

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

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

4 0

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

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

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

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

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

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

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

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

1class maths
2{
3   public int fun(int k, int y)
4   {
5       return k + y;
6   }
7   public int fun1(int t, float z)
8   {
9       return (t+(int)z);
10   }
11}   
12class Program
13{
14   static void Main(string[] args)
15   {
16       maths obj = new maths();
17       int i;
18       int b = 90;
19       int c = 100;
20       int d = 12;
21       float l = 14.78f;
22       i = obj.fun(b, c);
23       Console.WriteLine(i);
24       int j = (obj.fun1(d,  l));
25       Console.WriteLine(j);
26       Console.ReadLine();
27   }
28}

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

190, 26

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

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

جمع‌بندی

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

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

بر اساس رای ۱۶ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
Interview BitC-sharpcornerGuru99
۳ دیدگاه برای «سوالات مصاحبه برنامه نویسی #C — راهنمای استخدام»

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

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

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

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

نظر شما چیست؟

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