c# 抽象クラス 継承

      2017/07/13


抽象クラス 継承

抽象クラスとは抽象メソッドをもつ
クラスです。

抽象メソッドとは
処理を書かずメソッドを定義します。

抽象クラスの定義
abstract class クラス名
{
public abstract void メソッド名();
}

抽象クラスを使用するためには
抽象クラスを継承しなければいけません。

普通に抽象クラスを継承してえ

public override void spell()
{
Console.Write("呪文を唱えた");
}

抽象クラスで定義したメソッドをオーバーライドして
処理を書きます。


サンプルソース c#
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication13
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{

person taro = new person();

taro._age = 20;
taro._name = "taro";

Console.Write(taro._age + taro._name);
taro.spell();

}
class person :magic
{
int age;
string name;

public override void spell()
{
Console.Write("呪文を唱えた");
}
public int _age
{
get
{
return age;
}
set
{
age = value;

}
}
public string _name
{
get
{
return name;
}
set
{
name = value;

}
}

}

abstract class magic
{
public abstract void spell();
}

}
}

実行結果は
20taro呪文を唱えた

人は全員魔法が使えることにしましたw
personクラスは抽象化し過ぎたと思います。
データだけなら構造体で良かった気もします。

継承は多重継承出来ないのでこの様なことになりました。

よく抽象クラスとインターフェースの違いとか
考えると思いますが
その前に抽象クラス使いづらくね。

インターフェースのほうが使いやすいです。

継承より委譲を使ったほうがいいとかいいますし。

vb.net
抽象クラスの定義

Public MustInherit Class クラス名
Public MustOverride Sub メソッド名()
End Class

継承したクラスでのメソッド定義
オーバーライドします。
Public Overrides Sub メソッド名()
処理

End Sub

呼び出しは普通にメソッドとして呼び出しできます。

サンプルソース vb
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim taro As New person
taro._age = 20
taro._name = "taro"
Console.Write(taro._age & taro._name)

taro.spellt()
End Sub
Class person : Inherits magic
Dim age As Integer
Dim name As String

Public Overrides Sub spellt()
Console.Write("呪文を唱えた")

End Sub

Public Property _age As Integer
Get
Return age
End Get
Set(ByVal value As Integer)
age = value
End Set
End Property

Public Property _name As String
Get
Return name
End Get
Set(ByVal value As String)
name = value
End Set
End Property
End Class
Public MustInherit Class magic
Public MustOverride Sub spellt()
End Class

End Class

実行結果は
20taro呪文を唱えた

PR



 - C# 入門

Translate »