ویرگول
ورودثبت نام
سید عمید قائم مقامی
سید عمید قائم مقامیبرنامه نویسی سیستم ویندوز و مهندسی معکوس و علاقه مند به آموزش.
سید عمید قائم مقامی
سید عمید قائم مقامی
خواندن ۳ دقیقه·۱ روز پیش

مقدماتی بر سی شارپ(interface و تغییرات مهم C# 8 به بعد):

اینترفیس چیست؟

یک interface یا واسط، یک مفهومی است که به تعریف متدها بدون پیاده سازی آنها میپردازد، بنابراین میتوان گفت که از یک جهت بسیار شبیه به کلاس های انتزاعی یا Abstract است. کلاسهای مختلف میتوانند از این اینترفیسها ارث بری کنند و به پیاده سازی منطق آن بپردازند. یک interface میتواند شامل تعریف متد ها (Methods)، خصیصه ها (Properties) و رخداد ها (Events) باشد، اما نمیتواند دارای فیلد (اعضای خصوصی) باشد. استفاده از interface ها کار پیاده سازی منطق در برنامه را آسانتر کرده و خوانایی کدها را افزایش میدهد. پیاده سازی منطق در interface ها یکی از اصول طراحی SOLID نیز است، همچین در برنامه نویسی شی گرا نیز به شدت مورد استفاده قرار میگیرد.

اینترفیس در سی شارپ

یکی از دلایل اصلی استفاده از interface در زبان #C این است که زبان سی شارپ برخلاف زبان C++ امکان ارث بری چندگانه (Multiple Inheritance) ندارد و تنها از 1 کلاس میتواند ارث بری کند. پیاده سازی واسط (interface) در زبان #C به وسیلهی سینتکس رزرو شدهی “interface” انجام میپذیرد. به طور قراردادی، معمولا در زبان سی شارپ، نام interface ها را با I (آی بزرگ) شروع میکنند. به عنوان مثال فرض کنید میخواهیم یک interface برای حیوانات ایجاد کنیم، کد ایجاد این واسط (interface) به صورت زیر خواهد بود:

interface IAnimal { void animalSound(); }

در اینجا ما اینترفیسی با نام IAnimal ایجاد کردیم که در آن یک متد با نام animalSound وجود دارد که مقدار برگشتی آن از نوع void (یعنی متد چیزی Return نمی کند) است. همانطور که مشاهده میکنید، هیچ پیاده سازی برای این متد انجام نشده است زیرا اینترفیس animal یک تعریف انتزاعی است. اکنون کلاسهای دیگر میتوانند از این اینترفیس ارث بری کرده و به پیاده سازی متدهای آن بپردازند. به کد زیر توجه کنید:

class Cat : IAnimal { public void animalSound() { // The body of animalSound() is provided here Console.WriteLine("Miow Miow !!"); } } class Dog : IAnimal { public void animalSound() { // The body of animalSound() is provided here Console.WriteLine("Whoof Whoof !!"); } }

در کد بالا دو کلاس Cat و Dog واسط IAnimal را پیاده سازی شده است، که هرکدام از این کلاسها، با توجه به منطق مشخص خودشان، عملیات پیاده سازی را انجام دادهاند. به عنوان مثال کلاس Cat صدای حیوان را به صورت Miow پیاده سازی کرده است و کلاس Dog به صورت Whoof.

اکنون اگر متد animalSound را در شیهای ساخته شده از کلاس Cat و Dog صدا بزنیم با نتایج مختلفی روبرو میشویم:

Cat persianCat = new Cat(); Dog shiba = new Dog(); persianCat.animalSound(); shiba.animalSound();

خروجی:

Miow Miow !! Whoof Whoof !!

توجه شود به علت اینکه کلاسهای Cat و Dog از اینترفیس IAnimal ارث بری کردهاند، میتوان مستقیما به جای ذکر کردن نام کلاس، از نام اینترفیس نیز استفاده کرد:

IAnimal persianCat = new Cat(); IAnimal shiba = new Dog();

تغییرات مهم C# 8 به بعد:

متد با پیادهسازی در Interface

قبل از C# 8

اینترفیس فقط قرارداد بود:

interface ILogger { void Log(string message); }

هیچ کدی داخلش نمیشد نوشت.

از C# 8 به بعد

میتونی داخل اینترفیس متد با بدنه داشته باشی:

interface ILogger { void Log(string message); void LogError(string error) { Console.WriteLine("Error: " + error); } }

Null Safety با Nullable Reference Types

قبل از C# 8

string name = null; // کامپایلر مشکلی نداشت

Null Reference Exception میتونست هرجایی رخ بده .

از C# 8 به بعد

string? name = null; // مجاز string title = null; // هشدار

حالا:

  • string → نباید null باشد

  • string? → ممکن است null باشد

نتیجه:

  • باگ کمتر

  • کد امنتر

  • خطاها زودتر دیده میشن

Switch تمیز و مدرن)

قبل از C# 8

int result; switch (x) { case 1: result = 10; break; default: result = 0; break; }

بعد از C# 8

int result = x switch { 1 => 10, _ => 0 };

کوتاهتر
خواناتر
بدون break

Telegram: @CaKeegan
Gmail : amidgm2020@gmail.com

سی شارپ
۱
۰
سید عمید قائم مقامی
سید عمید قائم مقامی
برنامه نویسی سیستم ویندوز و مهندسی معکوس و علاقه مند به آموزش.
شاید از این پست‌ها خوشتان بیاید