MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
C Sharpの基礎 - 抽象クラスのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
C Sharpの基礎 - 抽象クラス
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == 抽象クラスとは、インスタンスを生成できないクラスのことで、継承することを前提としたクラスのことである。<br> <br> 抽象メソッドとは、実装を持たず、メソッドの意味(規約)のみを定義したメソッドである。<br> 抽象メソッドの実装は、基底クラスでは行わず、派生クラスに記述する。<br> <br> 以下に、抽象クラス・抽象メソッドの特徴を示す。<br> * クラスやメソッドの修飾子として、<code>abstract</code>修飾子を付加する。 * 抽象メソッドは、基底クラスではメソッドの意味(規約)のみを定義して、派生クラスで具体的な実装を記述するメソッド。<br>(C++において、純粋仮想関数と呼ばれるもの) * 抽象メソッドを1つでも持つクラス(抽象クラス)は、インスタンスを生成することができない。 <br><br> == 抽象化 == C#には、インスタンスを生成できないクラスや実装の無いメソッド(派生クラスでオーバーライドする)を定義するための構文が存在する。<br> インスタンスを生成できないクラスは、抽象クラスと呼ばれる。<br> <br> 抽象クラスを作成するには、クラスの定義時に<code>abstract</code>修飾子を付加する。<br> <syntaxhighlight lang="c#"> abstract class Person { protected int age; // 抽象クラスなので、コンストラクタが public であってもインスタンスは生成できない。 public Person(int age) { this.age = age; } public virtual int Age { get => 0; } } </syntaxhighlight> <br> 意味(規約)のみを定義して、実装は派生クラスに記述するメソッドは、抽象メソッドと呼ばれる。<br> 抽象メソッドを作成するには、メソッドに<code>abstract</code>修飾子を付加する。なお、抽象メソッドは抽象クラスのみ定義できる。<br> また、抽象プロパティを作成するには、<code>abstract</code>修飾子を付加する。<br> <syntaxhighlight lang="c#"> abstract class Person { protected int age; public Person(int age) { this.age = age; } public abstract int Age { get; // 抽象プロパティに定義は不要 } } </syntaxhighlight> <br> 以下の例では、抽象クラスを定義している。<br> <syntaxhighlight lang="c#"> using System; // 抽象クラス abstract class Person { protected string name; protected int age; public Person(string name, int age) { this.name = name; this.age = age; } public string Name { get => this.name; } public abstract int Age { get; // 抽象プロパティに定義は不要 } } /// <summary> /// </summary> class Truepenny : Person { public Truepenny(string name, int age) : base(name, age) { } public override int Age { // 実年齢を返す get => return this.age; } } /// <summary> /// </summary> class Liar : Person { public Liar(string name, int age) : base(name, age) { } public override int Age { get { // サバを読んだ年齢を返す if(this.age < 20) return this.age; if(this.age < 25) return this.age - 1; if(this.age < 30) return this.age - 2; if(this.age < 35) return this.age - 3; if(this.age < 40) return this.age - 4; return this.age - 5; } } } /// <summary> /// </summary> class Equivocator : Person { public Equivocator(string name, int age) : base(name, age) { } public override int Age { // 年齢を四捨五入した値を返す get => ((this.age + 5) / 10) * 10; } } class Sample { static void Main() { Introduce(new Truepenny ("hoge", 24)); Introduce(new Liar ("piyo", 24)); Introduce(new Equivocator("fuga", 24)); } /// <summary> /// </summary> static void Introduce(Person p) { Console.Write("My name is {0}.\n", p.Name); Console.Write("I'm {0} years old.\n\n", p.Age); } } </syntaxhighlight> <br> # 出力 My name is hoge. I'm 24 years old. My name is piyo. I'm 23 years old. My name is fuga. I'm 20 years old. <br><br> __FORCETOC__ [[カテゴリ:C_Sharp]]
C Sharpの基礎 - 抽象クラス
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse