在我的一个实验课程中,我遇到了一个与委托相关的问题,我解决如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DelegateApp
{
delegate void GreeterDelegate();
class Program
{
static void GreetGoodMorning()
{
if (DateTime.Now.ToString().EndsWith("AM"))
Console.WriteLine("Good Morning!");
}
static void GreetGoodEvening()
{
if (DateTime.Now.ToString().EndsWith("PM"))
Console.WriteLine("Good Evening!");
}
static void Main(string[] args)
{
GreeterDelegate Greeters = new GreeterDelegate(GreetGoodMorning);
Greeters += GreetGoodEvening;
Greeters();
Console.ReadLine();
}
}
}
我的做法是在方法中使用条件来检查时间。但实验室的一位教师建议我这样做:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DelegateApp
{
delegate void GreeterDelegate();
class Program
{
static void GreetGoodMorning()
{
Console.WriteLine("Good Morning!");
}
static void GreetGoodEvening()
{
Console.WriteLine("Good Evening!");
}
static void Main(string[] args)
{
GreeterDelegate Greeters;
if (DateTime.Now.ToString().EndsWith("AM"))
Greeters = new GreeterDelegate(GreetGoodMorning);
else
Greeters = new GreeterDelegate(GreetGoodEvening);
Greeters();
Console.ReadLine();
}
}
}
他建议将条件从方法中移出到
Main()
方法中。最终结果相同,但我仍然对哪种方式更好感到困惑,特别是考虑到在大型程序中使用委托时,是否应将条件检查移入方法中或保留在外部。