Je pensais à la fonctionnalité de List et je ne pensais pas au fait que Count() était une méthode d'extension lorsque j'ai fait la fausse supposition que je pouvais écrire une classe ayant une propriété et une méthode de même nom. La motivation dans mon esprit à l'époque était que je pouvais "paramétrer une propriété" pour des cas particuliers.
Je réalise maintenant que je peut le faire à condition que j'utilise une méthode d'extension.
Est-ce intentionnellement interdit dans les classes mais autorisé dans les extensions ou simplement une fonctionnalité inexistante ?
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;
}
}