C#特性-扩展方法

public static class PropertyExtension
{
        public static object GetValueByName(this object self, string propertyName)
        {
            if (self == null)
            {
                return self ;
            }
            Type t = self.GetType();
            PropertyInfo p = t.GetProperty(propertyName);
            return p.GetValue(self, null);
        }
}

扩展方法:

1 方法所在的类必须是静态的

2 方法也必须是静态的

3 方法的第一个参数必须是你要扩展的那个类型,比如你要给int扩展一个方法,那么第一个参数就必须是int。

4 在第一个参数前面还需要有一个this关键字。

string str = "abc";
object len = str.GetValueByName("Length");

注意:

很多人看到扩展方法也许眼里冒出金光,以后在设计的时候不管三七二十一,反正可以扩展。还有一些人会对类任意扩展,将以前一些作为”Helper”的方法统统使用扩展方法代替,注意的是扩展方法有“污染性”,所以我觉得在扩展的时候还是想想,是不是值得这样扩展。

在扩展的时候也不要对比较高层的类进行扩展,像我上面对object的扩展我觉得就是不可取的,object是所有类的基类,一经扩展,所有的类都被“污染”了。

原文地址:https://www.cnblogs.com/xiaoxiaof/p/4969587.html