덕 타이핑이란, 어떤 형식이 형식으로 인정 받기 위해선 그 형식이 어떤 일을 하는지를 보는 것이다.
인터페이스 상속과는 달리 상속으로 서로 이어져 있지 않기에, 수정을 하기 훨씬 편리하다.
아래 예시에서는 Hero는 Monster를 상속 받지 않지만, gameCharacters라는 dynamic 형식에서 두 가지는 걷고, 뛰고, 공격하는 같은 일을 하기에 같은 형식으로 인정 받는다.
using System;
namespace DuckTyping
{
class Hero
{
private string name = "You";
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
public void Walk()
{ Console.WriteLine(this.Name + " Walk"); }
public void Run()
{ Console.WriteLine(this.Name + " Run"); }
public void Attack()
{ Console.WriteLine(this.Name + " Attack"); }
}
abstract class Monster
{
public void Walk()
{ Console.WriteLine(this.GetType() + " Walk"); }
public void Run()
{ Console.WriteLine(this.GetType() + " Run"); }
public void Attack()
{ Console.WriteLine(this.GetType() + " Attack"); }
}
class Ork : Monster
{ }
class Skeleton : Monster
{ }
class MainApp
{
static void Main(string[] args)
{
dynamic[] gameCharacters = new dynamic[] {new Hero(), new Ork(), new Skeleton() };
foreach (dynamic char in gameCharacters)
{
Console.WriteLine(char.GetType());
char.Walk();
char.Run();
char.Attack();
Console.WriteLine();
}
}
}
}