.NET-19-扩展方法

public class 扩展方法
    {

        public static void GetKZ()
        {
            //如果定义了一个类MyClass2,并且已经发布使用
            //那么只要直接创建一个对象,然后就可以使用他的成员
            MyClass2 p = new MyClass2();
            p.Name = "硕硕";
            p.SayHi();

            //但是如果现在想要对该类进行扩展,增加一个方法SayHello,又不能破坏原先的方法
            //比如.net,2.0版本已经发布,现在要增加一些新的方法或者属性,但是又要兼容2.0所有的功能
            //那就不能再源代码的基础上修改,但是又要编译之后是在同一个类中
            //这时候就可以使用扩展方法来实现

            //扩展方法看着是某个对象的方法,但他其实不是改对象的方法,在扩展方法中是无法访问该类的私有成员的
            //如果反编译之后就可以发现
            //在代码执行的时候是在方法的内部调用了扩展的静态方法

            //如果在同一个命名空间中可以直接使用
            //如果在不同的命名空间中则必须导入命名空间才可以使用

            //扩展方法第四步,可以把扩展方法当做一般的方法一样调用
            //无参的扩展方法
            p.SayHello();
            //有参的扩展方法
            p.SayHAHA("是否");

            //扩展方法最好不要轻易使用,可能会出现其他的问题
        }
    }


    public class MyClass2
    {
        private string _name;

        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }

        public void SayHi()
        {
            Console.WriteLine("{0}说:HI", _name);
        }
    }

    /// <summary>
    /// 扩展方法第一步,创建一个静态类
    /// </summary>
    public static class MyClass2Ext
    {
        /// <summary>
        /// 第二部,在新添加的静态类中增加需要扩展的方法SayHello
        /// 第三部,在扩展方法SayHello中传入被关键字this修饰的MyClass2对象
        /// </summary>
        public static void SayHello(this MyClass2 p)
        {
            Console.WriteLine("{0}说:HELLO", p.Name);
        }

扫描二维码关注公众号,回复: 2548310 查看本文章


        /// <summary>
        /// 如果有参数,this必须放到第一个的位置
        /// </summary>
        /// <param name="p"></param>
        /// <param name="str"></param>
        public static void SayHAHA(this MyClass2 p, string str)
        {
            Console.WriteLine("hahahah{0}", str);
        }
    }

猜你喜欢

转载自blog.csdn.net/m0_37532448/article/details/81387057
今日推荐