دسته بندی مقالات
- بیشتر -محصولات
- بیشتر -آخرین مقالات
- بیشتر --
کلمهی کلیدی sealed و object type در سی شارپ
1403/11/02 -
عملگر UNION در پایگاه داده SQL
1403/10/30 -
کلاسهای انتزاعی در سی شارپ
1403/10/30 -
توابع تبدیل کننده در پایگاه داده SQL
1403/10/29 -
متدهای override در سی شارپ
1403/10/28 -
توابع پنجره ای در پایگاه داده SQL
1403/10/28
کلاسهای انتزاعی در سی شارپ
کلاسهای انتزاعی در سیشارپ
کلاس انتزاعی (Abstract Class) در سیشارپ کلاسی است که نمیتوان از آن نمونهسازی کرد و برای ایجاد چارچوب یا الگوی پایه استفاده میشود.
این کلاس معمولاً شامل متدهایی است که نیاز به پیادهسازی در کلاسهای فرزند دارد.
کلمه کلیدی abstract برای تعریف این نوع کلاس و متدها استفاده میشود.
ویژگیهای اصلی کلاس انتزاعی در سیشارپ
-
عدم امکان نمونهسازی
شما نمیتوانید مستقیماً یک شیء از کلاس انتزاعی بسازید. -
تعریف متدهای انتزاعی و معمولی
کلاس انتزاعی میتواند شامل متدهای انتزاعی (بدون پیادهسازی) و متدهای معمولی (با پیادهسازی) باشد. -
ارثبری
کلاسهای فرزند باید متدهای انتزاعی کلاس پایه را پیادهسازی کنند. -
وجود سازنده
کلاسهای انتزاعی میتوانند شامل سازنده باشند، اما این سازنده فقط از طریق کلاسهای فرزند قابل استفاده است. -
متغیرها و ویژگیها
کلاسهای انتزاعی میتوانند شامل متغیرها، ویژگیها (Properties) و فیلدها باشند.
ساختار کلی کلاس انتزاعی در سیشارپ
در زیر ساختار کلی یک کلاس انتزاعی و متدهای آن آورده شده است:
abstract class Shape
{
// متد انتزاعی
public abstract double CalculateArea();
// متد معمولی
public void Display()
{
Console.WriteLine("This is a shape.");
}
}
class Circle : Shape
{
private double radius;
public Circle(double radius)
{
this.radius = radius;
}
// پیادهسازی متد انتزاعی
public override double CalculateArea()
{
return Math.PI * radius * radius;
}
}
class Program
{
static void Main(string[] args)
{
// نمیتوان از کلاس انتزاعی نمونهسازی کرد
// Shape shape = new Shape(); // خطا
Shape circle = new Circle(5);
circle.Display(); // خروجی: This is a shape.
Console.WriteLine($"Area: {circle.CalculateArea()}"); // خروجی: Area: 78.54
}
}
🌟 آیا به دنبال یک فرصت عالی برای یادگیری برنامهنویسی هستید؟ 🚀
با دوره آموزشی سیشارپ ما، شما میتوانید مهارتهای خود را به سطح جدیدی ارتقا دهید! این دوره بهطور کامل طراحی شده تا به شما کمک کند تا از مبتدی تا پیشرفته در دنیای برنامهنویسی سیشارپ پیش بروید.
👨🏫 چرا دوره ما را انتخاب کنید؟
- محتوای جامع و عملی: با پروژههای واقعی و تمرینات عملی، یادگیری را به تجربهای جذاب تبدیل کنید.
- مدرس مجرب: از تجربه و دانش مدرس حرفهای بهرهمند شوید که شما را در هر مرحله از یادگیری راهنمایی میکنند.
- پشتیبانی ۲۴/۷: هر زمان که سوالی داشتید، ما در کنار شما خواهیم بود تا به شما کمک کنیم.
- دسترسی مادامالعمر: به محتوای دوره دسترسی دائمی داشته باشید و هر زمان که خواستید، میتوانید به آن مراجعه کنید.
💡 فرصت را از دست ندهید!
بایادگیری سیشارپ، میتوانید در دنیای فناوری اطلاعات به یک متخصص تبدیل شوید و در پروژههای جذاب و چالشبرانگیز شرکت کنید.
همین امروز به جمع یادگیرندگان ما بپیوندید و اولین قدم را به سوی آیندهای روشنتر بردارید!
شرکت در دوره آموزش برنامه نویسی سی شارپ
جزئیات و مفاهیم کلاس انتزاعی
-
متدهای انتزاعی
متدهای انتزاعی فقط امضای متد (Method Signature) را تعریف میکنند و بدنهای ندارند.
این متدها باید در کلاسهای فرزند پیادهسازی شوند.
abstract class Animal
{
public abstract void MakeSound();
}
class Dog : Animal
{
public override void MakeSound()
{
Console.WriteLine("Woof!");
}
}
-
متدهای معمولی
علاوه بر متدهای انتزاعی، یک کلاس انتزاعی میتواند شامل متدهای معمولی نیز باشد که نیازی به پیادهسازی مجدد در کلاسهای فرزند ندارند.
abstract class Vehicle
{
public abstract void StartEngine();
public void Honk()
{
Console.WriteLine("Honk! Honk!");
}
}
class Car : Vehicle
{
public override void StartEngine()
{
Console.WriteLine("Car engine started.");
}
}
-
سازنده در کلاس انتزاعی
کلاسهای انتزاعی میتوانند شامل سازنده باشند.
از این سازنده معمولاً برای مقداردهی اولیه فیلدهای مشترک استفاده میشود.
کلاسهای فرزند میتوانند از این سازنده استفاده کنند.
abstract class Person
{
public string Name { get; private set; }
public Person(string name)
{
Name = name;
}
public abstract void Greet();
}
class Student : Person
{
public Student(string name) : base(name) { }
public override void Greet()
{
Console.WriteLine($"Hello, my name is {Name} and I am a student.");
}
}
کاربردهای کلاس انتزاعی در سی شارپ
-
تعریف چارچوب برای کلاسهای مرتبط
کلاسهای انتزاعی معمولاً برای تعریف یک چارچوب مشترک میان کلاسهای مرتبط استفاده میشوند.
این چارچوب میتواند شامل متدها و ویژگیهایی باشد که همه کلاسهای فرزند باید رعایت کنند.
abstract class Employee
{
public string Name { get; set; }
public abstract double CalculateSalary();
}
class FullTimeEmployee : Employee
{
public double MonthlySalary { get; set; }
public override double CalculateSalary()
{
return MonthlySalary;
}
}
class PartTimeEmployee : Employee
{
public double HourlyRate { get; set; }
public int HoursWorked { get; set; }
public override double CalculateSalary()
{
return HourlyRate * HoursWorked;
}
}
-
استفاده از چندشکلی (Polymorphism)
یکی از مزایای بزرگ کلاسهای انتزاعی، امکان استفاده از چندشکلی است.
این ویژگی به شما اجازه میدهد از یک نوع مرجع عمومی (مانند کلاس پایه) برای ارجاع به اشیاء مختلف استفاده کنید.
abstract class Shape
{
public abstract double CalculateArea();
}
class Rectangle : Shape
{
public double Width { get; set; }
public double Height { get; set; }
public override double CalculateArea()
{
return Width * Height;
}
}
class Triangle : Shape
{
public double Base { get; set; }
public double Height { get; set; }
public override double CalculateArea()
{
return 0.5 * Base * Height;
}
}
class Program
{
static void Main(string[] args)
{
List<Shape> shapes = new List<Shape>
{
new Rectangle { Width = 10, Height = 5 },
new Triangle { Base = 6, Height = 4 }
};
foreach (var shape in shapes)
{
Console.WriteLine($"Area: {shape.CalculateArea()}");
}
}
}
-
جداسازی وظایف (Separation of Concerns)
با استفاده از کلاسهای انتزاعی، میتوانید وظایف را بهطور موثری بین کلاسهای مختلف تقسیم کنید و از کد تکراری جلوگیری کنید.
مثال ترکیب کلاس انتزاعی و اینترفیس
در بسیاری از موارد، کلاسهای انتزاعی و اینترفیسها بهصورت ترکیبی استفاده میشوند.
interface IDriveable
{
void Drive();
}
abstract class Vehicle
{
public string Make { get; set; }
public abstract void StartEngine();
}
class Car : Vehicle, IDriveable
{
public override void StartEngine()
{
Console.WriteLine("Car engine started.");
}
public void Drive()
{
Console.WriteLine("Car is driving.");
}
}
معایب و محدودیتهای کلاس انتزاعی
-
عدم پشتیبانی از ارثبری چندگانه
یک کلاس نمیتواند از چندین کلاس انتزاعی ارث ببرد. -
پیچیدگی کد
استفاده بیشازحد از کلاسهای انتزاعی ممکن است کد را پیچیده کند. -
وابستگی زیاد
تغییر در کلاس انتزاعی میتواند تغییرات گستردهای در کلاسهای فرزند ایجاد کند.
مثال پروژهمحور از کلاسهای انتزاعی در سی شارپ
مدیریت اشکال هندسی
این مثال سیستم سادهای برای محاسبه مساحت اشکال هندسی را پیادهسازی میکند:
using System;
using System.Collections.Generic;
abstract class Shape
{
public string Name { get; set; }
public abstract double CalculateArea(); // متد انتزاعی
}
class Circle : Shape
{
public double Radius { get; set; }
public Circle(double radius)
{
Name = "Circle";
Radius = radius;
}
public override double CalculateArea()
{
return Math.PI * Radius * Radius;
}
}
class Rectangle : Shape
{
public double Width { get; set; }
public double Height { get; set; }
public Rectangle(double width, double height)
{
Name = "Rectangle";
Width = width;
Height = height;
}
public override double CalculateArea()
{
return Width * Height;
}
}
class Program
{
static void Main()
{
List<Shape> shapes = new List<Shape>
{
new Circle(5), // دایره با شعاع 5
new Rectangle(10, 4) // مستطیل با طول 10 و عرض 4
};
foreach (var shape in shapes)
{
Console.WriteLine($"{shape.Name} Area: {shape.CalculateArea():0.00}");
}
}
}
نتیجه اجرا
Circle Area: 78.54
Rectangle Area: 40.00
این پروژه نشان میدهد چگونه میتوان از کلاس انتزاعی برای تعریف چارچوبی مشترک میان اشکال هندسی استفاده کرد.
دوره های مرتبط
آموزش برنامه نویسی سی شارپ
زبان شی گرایی حرفه ای سی شارپ یک زبان قدرتمند برای طراحی نرم افزار به شمار میرود.