علت استفاده از کلاس‌های abstract

شنبه 13 شهریور 1395

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

علت استفاده از کلاس‌های abstract

 ما در C# کلاس بسیارمهمی داریم که تحت عنوان کلاس abstract شناخته می‌شود. کلاس abstract می‌تواند دارای متدهای abstract (فقط امضای متد) باشد. اینترفیس موردنظر شامل امضای متد است. در C# یک کلاس abstract چگونه از یک اینترفیس تفاوت می‌یابد؟ یک سوالی دوست‌داشتنی در مصاحبه‌های C# این است: یک کلاس abstract چیست و چرا از آن استفاده کنیم؟

شما با مراجعه به این پیوند، می‌توانید راجع‌به واژه‌های کلیدی virtual، override، new و abstract بیشتر بیاموزید.

تفاوت‌های کلاس abstract و اینترفیس

کاربرد پیاده‌سازی کلاس abstract

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

پیاده‌سازی کلاس abstract

public abstract class DataSource  
{  
    protected string dataSourceName;  
    private string environment;  
    protected DataSource(string environment, string dsName) {  
        this.environment = environment;  
        this.dataSourceName = dsName;  
        GetDataSourceCredentials();  
    }  
    private void GetDataSourceCredentials() {  
        Console.WriteLine(string.Format("Get {0}'s connection setting for {1} environment from config file", dataSourceName, environment));  
    }  
    public abstract void OpenAndReturnConnection();  
}  
public class MsSqlDataSource: DataSource {  
    public MsSqlDataSource(string environment): base(environment, "MsSQL") {}  
    public override void OpenAndReturnConnection() {  
        Console.WriteLine(string.Format("Create and return Connection for {0} dataSource", dataSourceName));  
    }  
}  
public class OracleDataSource: DataSource {  
    public OracleDataSource(string environment): base(environment, "Oracle") {}  
    public override void OpenAndReturnConnection() {  
        Console.WriteLine(string.Format("Create and return Connection for {0} dataSource", dataSourceName));  
    }  
}  

ما باید مطلع باشیم که یک کلاس abstract می‌تواند دارای پیاده‌سازی ویژه‌اش برای متدها باشد. در کد بالا، من یک کلاس abstract پایه به‌نام DataSource ایجاد کرده‌ام. این کلاس به کلاس‌های به‌هم‌پیوسته مشتق شده‌است، مثل SQLDataSource و OracleDataSource.

کلاس به‌هم‌پیوسته نیز روش مخصوص‌به‌خود را برای برقراری ارتباط  دارد. این‌جا باید یک راه‌حل متداول برای ارائه‌ی connection string به فایل پیکربندی وجود داشته‌باشد.

در برنامه‌ی احتمال استفاده از پایگاه‌داده‌های مختلف شبیه My SQL Server، Oracle server ویا شاید فایل MS Excel؛ بيشتر است. همانطور که در کد بالا ذکرشد، ما یک متد خصوصی (private) برای ارائه‌ی  connection string پایگاه‌داده ازفایل پیکربندی برپایه‌ی نام پایگاه‌داده و محیط (به‌عنوان مثال DEV، QAیا PROD) داریم.

اکنون اگر شما کد پایین را اجراکنید:

DataSource sqlDS = new MsSqlDataSource("DEV");  
sqlDS.OpenAndReturnConnection();  

نتيجه به‌صورت تصوير زير خواهد بود:

این‌جا connection string را برای محیط DEV دریافت می‌کنیم. این قابلیت برای کلاس‌هایی که از کلاس DateSource مشتق‌شده‌اند رواج دارد. ساختن ارتباط مختص چنين كلاس‌هايي مي‌باشد. از این‌رو در کلاس‌های abstractپايه ما دارای یک متد abstract هستیم.

گرچه، این یک مثال بسیار پایه‌ای و کوچک است، اما به‌شما کمک می‌کند یک کلاس abstract را درک کنیم.

آموزش سی شارپ

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان
  • C#.net
  • 4k بازدید
  • 5 تشکر

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید