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();