Is the method naming for property getters/setters standardized in IL?

后端 未结 2 1046
有刺的猬
有刺的猬 2020-12-19 03:54

I have the following two methods that I am wondering if they are appropriate:

public bool IsGetter(MethodInfo method)
{
    return method.IsSpecialName
              


        
2条回答
  •  借酒劲吻你
    2020-12-19 04:16

    A property method has three extra characteristics, compared with a normal method:

    1. They always start with get_ or set_, while a normal method CAN start with those prefixes.
    2. The property MethodInfo.IsSpecialName is set to true.
    3. The MethodInfo has a custom attribute System.Runtime.CompilerServices.CompilerGeneratedAttribute.

    You could check on 1, combined with option 2 or 3. Since the prefixes are a standard, you should not really worry about checking on it.

    The other method is to enumerate through all properties and match the methods, which will be much slower:

    public bool IsGetter(MethodInfo method)
    {
        if (!method.IsSpecialName)
            return false; // Easy and fast way out. 
        return method.DeclaringType
            .GetProperties(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic) 
            .Any(p => p.GetGetMethod() == method);
    }
    

提交回复
热议问题