イヌのように鳴き,ネコのようにも鳴く,キミはだあれ?

ドキドキクイズ第2弾.今回は CLR クイズ.難易度は専門解説書程度ですが,非常に悪質です.



次のような interface IDog, ICat が定義されているとします.

public interface IDog
{
    string Bark();
}
public interface ICat
{
    string Bark();
}

また,以下のようなメソッドが定義されているとします.

static public void Test(object o)
{
    Type t = o.GetType();

    Console.WriteLine("o is IDog : {0}", o is IDog);
    Console.WriteLine("o is ICat : {0}", o is ICat);

    Console.WriteLine("typeof(IDog).IsAssignableFrom(o.GetType()) : {0}", typeof(IDog).IsAssignableFrom(t));
    Console.WriteLine("typeof(ICat).IsAssignableFrom(o.GetType()) : {0}", typeof(ICat).IsAssignableFrom(t));

    Console.WriteLine("(o as IDog).Bark() : {0}", (o as IDog).Bark());
    Console.WriteLine("(o as ICat).Bark() : {0}", (o as ICat).Bark());
}

あるオブジェクトを引数としてこのメソッドを呼び出すと,以下のように出力されました.このようなオブジェクトを作りなさい.

o is IDog : True
o is ICat : True
typeof(IDog).IsAssignableFrom(o.GetType()) : False
typeof(ICat).IsAssignableFrom(o.GetType()) : False
(o as IDog).Bark() : Barked as IDog
(o as ICat).Bark() : Barked as ICat

ヒント: C# クイズではなく CLR クイズです.
解答はそのうちに.