私は List の機能について考えていましたが、同じ名前のプロパティとメソッドを持つクラスを記述できるという誤った仮定をしたとき、Count() が拡張メソッドであるという事実については考えていませんでした。当時の私の頭の中の動機は、特別な場合のために「プロパティをパラメータ化する」ことができるということでした。
拡張メソッドを利用すれば、できることがわかりました。
これはクラスでは意図的に許可されていませんが、拡張機能では許可されていますか、それとも単に存在しない機能ですか?
void Main()
{
var list = new List<string>();
// You compile code that gets the property named Count
// and calls the method named Count()
list.Add("x");
Console.WriteLine (list.Count);
list.Add("x");
Console.WriteLine (list.Count());
var c = new C();
Console.WriteLine (c.Count);
Console.WriteLine (c.Count());
}
public class C
{
public int Count { get { return 3; } }
// But you cannot compile a class that contains both a property
// named Count and a method named Count()
//public int Count () { return 0; } // <-- does not compile
}
public static class X
{
public static int Count(this C c)
{
return 4;
}
}