Action<T>委托 Environment.GetCommandLineArgs().Length返回包含当前进程的命令行参数的字符串数组
显示声明一个委托
delegate void DisplayMessage(string message);
class Program
{
static void Main(string[] args)
{
DisplayMessage messageTarget;
//Action<string> messageTarget;
if (Environment.GetCommandLineArgs().Length > 1)
messageTarget =ShowWindowsMessage;
else
messageTarget = Console.WriteLine;
messageTarget("Hello,World");
}
private static void ShowWindowsMessage(string message)
{
Console.WriteLine("XXXXXX");
}
}
使用Action<T>
class Program
{
static void Main(string[] args)
{
Action<string> messageTarget;
if (Environment.GetCommandLineArgs().Length > 1)
messageTarget =ShowWindowsMessage;
else
messageTarget = Console.WriteLine;
messageTarget("Hello,World");
}
private static void ShowWindowsMessage(string message)
{
Console.WriteLine("XXXXXX");
}
}
Action<T>与匿名方法一起使用
class Program
{
static void Main(string[] args)
{
Action<string> messageTarget;
if (Environment.GetCommandLineArgs().Length > 1)
//messageTarget =ShowWindowsMessage;
messageTarget = delegate(string s) { ShowWindowsMessage(s); };
else
messageTarget = delegate(string s) { Console.WriteLine(s); };
messageTarget("Hello,World");
}
private static void ShowWindowsMessage(string message)
{
Console.WriteLine("XXXXXX");
}
}
将lambda表达式分配给Action<T>委托实例
class Program
{
static void Main(string[] args)
{
Action<string> messageTarget;
if (Environment.GetCommandLineArgs().Length > 1)
messageTarget = s=> Console.WriteLine(s);
else
messageTarget = s=> ShowWindowsMessage(s);
messageTarget("Hello,World");
}
private static void ShowWindowsMessage(string message)
{
Console.WriteLine("XXXXXX");
}
}
委托事件应用
public enum eMessage
{
GameStart,
PlayerStart,
GamePause,
GameOver
}
public static class GameMessage
{
public static event System.Action<eMessage> onMessage;
public static void PostMessage(eMessage message)
{
if(onMessage!=null)
onMessage(message);
}
public static void Clear()
{
onMessage = null;
}
}
class Program
{
static void Main(string[] args)
{
GameInit();
GameMessage.PostMessage(eMessage.GameStart);
}
public static void OnMessage(eMessage message)
{
switch (message)
{
case eMessage.GameStart:
Console.WriteLine("GameStart");
break;
case eMessage.PlayerStart:
Console.WriteLine("PlayerStart");
break;
case eMessage.GamePause:
Console.WriteLine("GamePause");
break;
case eMessage.GameOver:
Console.WriteLine("GameOver");
break;
}
}
public static void GameInit()
{
GameMessage.onMessage += OnMessage;
}
}