[.NET] 善用 介面或類別 提昇程式碼效率

  • 7010
  • 0

[.NET] 善用 介面或類別 提昇程式碼效率

在上篇提到了用泛型來進行重構 [.NET] 善用 泛型方法 提高程式碼效率,除了使用泛型之外我們也能將程式碼重覆的地方抽離出來變成介面(Interface)或抽像類別(Abstract class),就用上次的原型程式碼來當範例,咱們來複習一下。

Company及Family兩個類別

image_thumb1

 

然後還有一個Print.PrintName靜態方法


{ 
    public static string PrintName(Commany Commany)
    {
        if (Commany==null)
            return null;
        
        string data = string.Format("名稱:{0},地址:{1}",Company.Name,Company.Address);
        return data;
    }
    public static string PrintName(Family Family)
    {
        if (Family == null)
            return null;

        string data = string.Format("名稱:{0},地址:{1}", Family.Name, Family.Address);
        return data;
    }
}

 

在用戶端呼叫


{
    Company company = new Company() { Name = "點部落", Address = "魔界村" };
    Family family = new Family { Name = "余宅", Address = "地球村" };
    Console.WriteLine(Print.PrintName(company));
    Console.WriteLine(Print.PrintName(family));
}

 

到目前為止都跟上一篇一樣


使用介面抽離


{
    string Name { get; set; }
    string Address { get; set; }
}

 

Company 跟 Family 同樣是繼承IPrint介面並且實作


{
    public string Name { get; set; }
    public string Address { get; set; }
}

{
    public string Name { get; set; }
    public string Address { get; set; }
}

 

將PrintName改寫成以下:


{
    if (Print == null)
        return null;

    string data = null;
    data = string.Format("名稱:{0},地址:{1}", Print.Name, Print.Address);
    return data;
}

 

在用戶端裡呼叫


{
    IPrint company= new Company() { Name = "點部落", Address = "魔界村" };
    IPrint family = new Family { Name = "余宅", Address = "地球村" };

    Console.WriteLine(Print.PrintName(company));
    Console.WriteLine(Print.PrintName(family));
}

類別關係圖如下:
image


利用抽象類別,介面跟抽像類別在使用上有些許不同,但目的其實是相同的,建立一個AbsPrint類別,裡面的屬性已經實作過


{
    public string Name { get; set; }
    public string Address { get; set; }
}

所以繼承AbsPrint的類別就已經擁有Name及Address屬性

{
}

public class Family : AbsPrint
{

}

 

PrintName方法改成以下:


{
    if (Print == null)
        return null;

    string data = null;
    data = string.Format("名稱:{0},地址:{1}", Print.Name, Print.Address);
    return data;
}

在用戶端則跟用介面差不多只是實體化的東西不一樣


{
    AbsPrint company = new Company() { Name = "點部落", Address = "魔界村" };
    AbsPrint family = new Family { Name = "余宅", Address = "地球村" };

    Console.WriteLine(Print.PrintName(company));
    Console.WriteLine(Print.PrintName(family));

}

把重覆的程式碼抽離到抽像類別實作,可以減少程式碼重複以及維持程式碼的一致性。


後記:

使用抽像類別實作程式碼,這是設計模式中的範本模式,這是很多人常在用的模式,在本篇的例子可能感覺不出來他的好處,下次應該再舉更詳細的例子。

若有謬誤,煩請告知,新手發帖請多包涵


Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET

Image result for microsoft+mvp+logo