首頁  >  文章  >  後端開發  >  C# 中的抽象類別

C# 中的抽象類別

WBOY
WBOY原創
2024-09-03 15:24:41304瀏覽

抽象這個詞意味著一種思想或想法,它本身沒有任何物理形式,而是充當其他事物的基礎。抽象類別背後的概念也是如此。在本文中,我們將討論 C# 中的抽象類別。抽象類別是 C# 中無法實例化的特殊類,也就是不能建立抽象類別的物件。抽象類別的目的是為其他類別的衍生提供骨架結構。抽象類別沒有自己的實作。它們要求開發人員和程式設計師從抽象類別派生並建構骨架結構,即編寫其實作。抽象類別內部也可以有抽象方法聲明。再次強調,這些方法不能有任何定義。

聲明抽象類別和方法的語法包括在聲明之前放置關鍵字abstract。就這麼簡單。

文法:

abstract class ClassName
{
public abstract void MethodName();
}

記住,抽象方法不能有定義。因此,抽象方法聲明以分號結尾。它們只能被聲明。定義必須在派生的非抽象類別中提供。

抽象類別在 C# 中如何運作?

abstract 關鍵字指示編譯器該類別是要在衍生類別中實作的基底類別骨架結構。如果編譯器發現任何派生抽象基底類別的類,它會檢查派生類別中是否重寫並實作了所有抽象方法和屬性。

抽象類別與介面

現在,您可能想知道這一切是什麼以及介面的作用。那麼,抽象類別與介面有何不同?

讓我們透過一個例子來理解這一點。假設我們經營一家出版公司,並聘請了一些編輯為我們的雜誌撰寫專欄。讓我們假設他們是不同類型的專家,撰寫的文章將在一周的特定日期發表,並且都以相同的薪水受聘。

讓我們為編輯器定義抽象 Employee 類別。

代碼:

abstract class EmployeeEditors
{
public abstract void Genre();
public abstract string PublishDay();
public int Payment()
{
Console.Write(“Monthly salary is {0}$.”, 1000);
}
}

我們可以輕鬆實現付款方法,因為我們知道它對所有人來說都是相同的。另外兩個方法被宣告為抽象方​​法,由衍生類別實作。人們可以為從抽象類別派生的每個編輯器聲明一個普通類,然後可以實作抽象方法來定義流派和日期。現在,假設每個編輯的薪水也不同。更改程式碼的一種方法是將 Payment 方法宣告為抽象方​​法。另一種方法是將整個 EmployeeEditor 聲明為一個接口,並給予繼承類別充分的自由。

Public interface EmployeeEditors
{
public abstract void Genre();
public abstract string PublishDay();
public abstract int Payment();
}

因此,抽象類別是其他類別建構的基底類別。而介面是其他類別可以參考並從頭開始建立的藍圖。

C# 中抽象類別的規則

使用抽象類別時需要遵循某些規則。

  • 由於抽象類別的方法定義不完整,因此無法實例化。任何建立抽象類別物件的嘗試都會導致編譯時錯誤。
  • 抽象方法不能在抽象類別中定義,只能聲明。方法體必須在衍生類別中定義。
  • 衍生類別必須實作所有抽象方法。
  • 抽象方法不能是靜態或虛擬的。

C# 中的抽象類別範例

問題陳述:讓我們舉另一個現實世界的例子。假設您被要求自動執行某個組織的錄取通知書產生過程。目前的流程完全是手動的,需要編輯現有的錄取通知書,這很容易出錯。所有錄用通知書中都有一些共同的內容,例如工作地點、工作時間、公司名稱、公司品牌等。其他內容例如員工姓名、職位、薪資、加入日期等,都是針對每個錄用通知書所特有的。錄取通知書。

解決方案:您可以為上述目的設計一個抽象類別。讓我們看看如何。

代碼:

ode: using System;
abstract class OfferLetter
{
public abstract string Name(string name);
public abstract string Designation(string designation);
public abstract int Payment(int pay);
public abstract string DOJ(string doj);
public string CompanyName()
{
return "XYZ Corporation Pvt. Ltd.";
}
public string OfficeAddress()
{
return "512, Manhattan, NY";
}
public string CompanyBranding()
{
return this.CompanyName() + " is a privately owned regsitered corporation operating \n under the license provided by the state of New York.";
}
public string Disclaimer()
{
return "This letter and its contents are confidential in nature and are intended only \n for the recipient."+
"\nIf you are not the correct recipient, kindly return it immediately \n to " + this.CompanyName() + " " + this.OfficeAddress() + ".";
}
}
class PrintOfferLetter : OfferLetter
{
public override string Name(string name)
{
return name;
}
public override string Designation(string designation)
{
return designation;
}
public override int Payment(int pay)
{
return pay;
}
public override string DOJ(string doj)
{
return doj;
}
}
public class Program
{
public static void Main()
{
PrintOfferLetter ltr = new PrintOfferLetter();
string empName = "Mr. ABC", designation = "Senior Consultant", doj = "20-02-2020";
int pay = 50000;
Console.WriteLine(ltr.CompanyName() + " is very happy to extend this offer letter to \n" + ltr.Name(empName)
+ " at the designation of " + ltr.Designation(designation) + " with an annual pay of " + ltr.Payment(pay) + "$.");
Console.WriteLine("\nYou are required to report at " + ltr.OfficeAddress() + " from " + ltr.DOJ(doj) + " (dd-mm-yyyy).");
Console.WriteLine("\n\n" + ltr.CompanyBranding());
Console.WriteLine("\n\n" + ltr.Disclaimer());
}
}

輸出:

C# 中的抽象類別

結論

簡而言之,抽象類別只是一個不完整或部分完整的類,其他類別可以派生並在其之上建構邏輯。在本文中,我們了解瞭如何聲明抽象類,並且它正在工作。我們看到了抽象類別的使用以及它們與介面的不同之處的現實生活範例。建議在程式碼中盡可能嘗試使用抽象類別。這是良好程式設計的關鍵實踐。

以上是C# 中的抽象類別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:C# 排序字典下一篇:C# 排序字典