C# の抽象クラス

WBOY
リリース: 2024-09-03 15:24:41
オリジナル
312 人が閲覧しました

抽象という言葉は、それ自体は物理的な形を持たないが、他のものの基礎として機能する考えやアイデアを意味します。抽象クラスの背後にある概念も同じです。この記事では、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);
}
}
ログイン後にコピー

支払い方法はすべての人にとって同じであることがわかっているので、簡単に実装できました。他の 2 つのメソッドは、派生クラスによって実装されるように抽象宣言されています。抽象クラスから派生した各エディターの通常クラスを宣言し、ジャンルと曜日を定義する抽象メソッドを実装できます。さて、各編集者の給料も違うとします。コードを変更する 1 つの方法は、Payment メソッドを抽象として宣言することです。もう 1 つの方法は、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 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート