Wie kann es sein, Ambiguität zwischen einem Eigenschafts-getter und einer Methode mit einem argument?

Ich kann nicht glauben, dass ich noch nie über diese vor, aber warum bekomme ich einen compiler-Fehler für diesen code?

public class Main
{
    public Main()
    {
        var ambiguous = new FooBar(1);
        var isConfused = ambiguous.IsValid; //this call is ambiguous
    }
}

public class FooBar
{
    public int DefaultId { get; set; }

    public FooBar(int defaultId)
    {
        DefaultId = defaultId;
    }

    public bool IsValid
    {
        get { return DefaultId == 0; }
    }

    public bool IsValid(int id)
    {
        return (id == 0);
    }
}

Hier ist die Fehlermeldung:

Mehrdeutigkeit zwischen 'FooBar.IsValid " und " FooBar.IsValid(int)'

Warum ist diese mehrdeutig?

Ich denke es gibt zwei Gründe, es sollte nicht zweideutig sein:

  1. Es gibt keine parenthases nach IsConfused.
  2. Es gibt keine int-argument für IsConfused.

Wo ist die Unklarheit?

InformationsquelleAutor devuxer | 2011-07-07
Schreibe einen Kommentar