class Employee : ICloneable
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
public Employee(string name)
{ Name = name; }
public object Clone()
{
return new Employee(Name);
}
}
abstract class Person
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
public Person(string name)
{ Name = name; }
public abstract void DoSomething();
}
class Employee : Person
{
public Employee(string name) : base(name)
{}
public override void DoSomething()
{ /* Do good job. */ }
}
機能上の大きな違いとしては、
抽象クラスは、実装を持つこともできる。上記の例でいうと、name や Name や Person(string name)。
class Context
{
State state = null;
public State State
{
set { state = value; }
}
public void DoSomething()
{
if (state != null)
state.DoSomething();
}
}
abstract class State
{
public abstract void DoSomething();
}
class ConcreteState1 : State
{
public override void DoSomething()
{ /* 省略 */ }
}
class ConcreteState2 : State
{
public override void DoSomething()
{ /* 省略 */ }
}
・interface を使った場合の例:
class Context
{
State state = null;
public State State
{
set { state = value; }
}
public void DoSomething()
{
if (state != null)
state.DoSomething();
}
}
interface State
{
void DoSomething();
}
class ConcreteState1 : State
{
public void DoSomething()
{ /* 省略 */ }
}
class ConcreteState2 : State
{
public void DoSomething()
{ /* 省略 */ }
}
ディスカッション
コメント一覧
実にわかりやすい説明で、なおかつパワーアップされてますね♪
中西 さん、こんにちは。
ありがとうございます。
# たまには技術的なネタもやらないと。