I use Type.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic)
to retrieve an array of methods for a given ty
I think your best bet would be to filter out methods that have the CompilerGenerated attribute. This is likely to be more future-proof, although that doesn't account for hypothetical future compilers disrespecting this attribute entirely. The IsSpecialName
test is probably also required since it appears as though the C# compiler does not attach the attribute to event add
and remove
methods.
typeof(MyType)
.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic)
.Where(m => !m.IsSpecialName)
The secret is BindingFlags.DeclaredOnly
typeof(MyType).GetMethods(BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly)