我喜欢新的Dynamic关键字并读取它可以用作替换访问者模式.
它使代码更具声明性,我更喜欢.
尽管用实现动态调度的类替换'Type'上的所有switch开关实例是一个好主意.
class VistorTest
{
public string DynamicVisit(dynamic obj)
{
return Visit(obj);
}
private string Visit(string str)
{
return "a string was called with value " + str;
}
private string Visit(int value)
{
return "an int was called with value " + value;
}
}
Run Code Online (Sandbox Code Playgroud)
这真的取决于你认为什么是"好主意".
这是有效的,它以相当优雅的方式工作.它对其他方法有一些优点和一些缺点.
在优势方面:
对于缺点:
visitorTest.DynamicVisit(4.2);
,你将在运行时获得异常,但没有编译时间投诉.就个人而言,我认为这是一种合理的方法.在典型的实现中,访问者模式具有相当高的维护成本并且通常难以干净地测试.这可能会使成本略高,但使实施更加简单.
通过良好的错误检查,我在使用动态作为方法时没有问题.就个人而言,我可能会使用这样的方法,因为以合理的方式执行的替代方案会变得非常讨厌.
但是,我会在这里做一些改变.首先,正如我所提到的,您确实需要包含错误检查.
其次,我实际上DynamicVisit
会dynamic
直接采取行动,这可能会使(稍微)更明显地发生什么:
class VistorTest
{
public string DynamicVisit(dynamic obj)
{
try
{
return Visit(obj);
}
catch (RuntimeBinderException e)
{
// Handle the exception here!
Console.WriteLine("Invalid type specified");
}
return string.Empty;
}
// ...Rest of code
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1558 次 |
最近记录: |