C#委托本质探索 三、方法变量调用

// 测试2.方法变量值的改变
// 这里使用测试2的delegate不再造新的.
//delegate string 抽象方法(string 参数);

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
    class ThirdTest
    {
        public void DoTest()
        {
            原始对象 对象实例 = new 原始对象();

            string 执行结果;
            //测试直接的方法调用
            执行结果 = 对象实例.原方法实体("运营魔兽世界");
            Console.WriteLine(执行结果);


            //测试方法变量调用
            执行结果 = 对象实例.方法变量("处理业内竞争");
            Console.WriteLine(执行结果);


            //改变方法变量值
            对象实例.方法变量 = new 抽象方法(this.新的方法实体);
            执行结果 = 对象实例.方法变量("工作交接");
            Console.WriteLine(执行结果);
        }

        private string 新的方法实体(string 方法参数)
        {
            StringBuilder 工作内容 = new StringBuilder();
            if (方法参数 == "工作交接")
            {
                工作内容.AppendLine("上交资料");
                工作内容.AppendLine("打包走人");
            }
            return 工作内容.ToString();
        }

    }

    class 原始对象
    {
        public 抽象方法 方法变量;

        public 原始对象()
        {
            //为方法变量实例化
            方法变量 = new 抽象方法(this.原方法实体);
        }

        //定义原始实体
        public string 原方法实体(string 方法参数)
        {
            StringBuilder 工作内容 = new StringBuilder();
            if (方法参数 == "运营魔兽世界")
            {
                工作内容.AppendLine("安排设备采购");
                工作内容.AppendLine("招募客服,上岗培训");
                工作内容.AppendLine("广告宣传");
                工作内容.AppendLine("游戏上市");
                工作内容.AppendLine("推出活动");
                工作内容.AppendLine("…………");
            }
            else if (方法参数 == "处理业内竞争")
            {
                工作内容.AppendLine("调查竞争对手");
                工作内容.AppendLine("展开斗争");
            }
            else
            {
                工作内容.AppendLine("传入参数异常");
            }
            return 工作内容.ToString();
        }


    }

    // 到这里我们已经看到了方法变量值被改变的一些效果.
    // 把一个方法变量向外公布,当变量值改变时再次调用就指向改变后的方法调用.
    // 变量操作符除了=,还有+=, -= 等方式.
    // 用到方法变量上,就表现为方法地址指针的重定向、多指向和指向移除.
    // 上面一直关注方法变量向外公布,在"原始对象"自身没有使用到方法变量.
    // 下面的例子增加对象内部使用方法的情况.
}

// 测试代码

            ThirdTest test3 = new ThirdTest();
            test3.DoTest();

原文地址:https://www.cnblogs.com/ww960122/p/1903952.html