Extensionメソッド

ExtensionメソッドがGenericsに対応しました。

using System;

public module Extentions {
    public PrintAll [T] (this arr : array [T]) : void {
        foreach (a in arr)
            Console.Write ($"$a ");
        Console.WriteLine ();
    }
}

def ia = array [1, 2, 3, 4, 5];
ia.PrintAll ();

def sa = array ["A", "B", "C", "D", "E"];
sa.PrintAll ();

/*
1 2 3 4 5
A B C D E
 */

ただ、現状の問題点として、

  1. Nemerleコンパイラが.NETでコンパイルできない。(monoが必要)
  2. 他のアセンブリに格納されたExtensionメソッドを呼ぶには、1度明示的にメソッドを呼ぶ必要がある。

という不具合があります。

派生クラスの場合、Extensionメソッドが呼ばれないのは仕様だったか不具合だったかはちょっと不明です。今、LINQが動かない環境なので・・・(^^;

(追記) 派生クラスでも動くのが正解の模様。