Se creo un metodo di estensione su Enum chiamato HasFlag
, ogni volta che provo a chiamare HasFlag
in un'istanza di enum, utilizza il metodo di estensione, anziché il metodo di istanza. Perché?Perché il metodo di estensione HasFlag su Enum ha la meglio su Enum.HasFlag?
public static class Extensions
{
public static bool HasFlag(this Enum e)
{
return false
}
}
con il codice:
public enum Foo
{
A, B, C
}
public void Whatever()
{
Foo e = Foo.A;
if (e.HasFlag())
{
// ...
}
}
compila a:
public void Whatever()
{
Foo e = Foo.A;
if (Extensions.HasFlag(e))
{
// ...
}
}
Perché non il compilatore utilizzare il metodo Enum.HasFlag
esempio?
Poiché il metodo di istanza 'HasFlag' si aspetta un parametro. Dal momento che non ne fornite uno, viene risolto il metodo di estensione. Prova 'e.HasFlag (Foo.A);' e guarda. – haim770
Effettivamente, controlla i [documenti] (https://msdn.microsoft.com/en-us/library/dd782536 (v = vs.110) .aspx) e nota la firma. È diverso dalla funzione 'HasFlag'. Inoltre, non ha senso usare 'HasFlag' a meno che il tuo enum non sia contrassegnato con' FlagsAttribute'. –
Yikes! Sto spegnendo il computer e sto andando a fare una bella sdraiata. Grazie! – citizenmatt