덕 타이핑이란, 어떤 형식이 형식으로 인정 받기 위해선 그 형식이 어떤 일을 하는지를 보는 것이다.

인터페이스 상속과는 달리 상속으로 서로 이어져 있지 않기에, 수정을 하기 훨씬 편리하다.

아래 예시에서는 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();
            }
        }
    }
}