duck typing in C#

من تا همين امروز نميدونستم كه كد زير توي #C معتبره و كامپايل ميشه:

class Foo
{
    public Bar GetEnumerator() { return new Bar(); }

    public struct Bar
    {
        public bool MoveNext()
        {
            return false;
        }

        public object Current
        {
            get { return null; }
        }
    }
}

// the following compiles just fine:
Foo f = new Foo();
foreach (object o in f)
{
    Console.WriteLine("Hi!");
}

نكته اينجاست كه توي NET. و #C براي iteration بايد از IEnumerable استفاده ميكرديم. اما گويا foreach در #C از duck typing استفاده ميكنه. ممكنه برروي درست بودن استفاده از چنين الگويي توي زبان strongly typedاي مثل سي.شارپ كلي حرف و حديث باشه؛ اما نكته عجيبتر از نظر من اينه كه چرا اين قضيه توي MSDN و يا C# Specification مستند نشده؟!

————

پ.ن: كد را از اينجا برداشته ام: وبلاگ Krzysztof Cwalina. اگر از علاقمندان #C هستيد، اين وبلاگ رو از دست نديد، فوق العاده است.

Leave a Reply