什么时候应该在c# 4.0?.......Any中使用动态关键字在c# 4.0中使用动态关键字是一个很好的例子,它解释了动态关键字的用法...
发布于 2010-04-20 20:50:08
当不使用Dynamic是痛苦的时,应该只使用。例如在MS Office库中。在所有其他情况下,应该避免这种情况,因为编译类型检查是有益的。下面是使用动态的好情况。
发布于 2015-01-15 01:11:38
这个怎么样?我一直在寻找的东西,我想知道为什么没有‘动态’就这么难做到。
interface ISomeData {}
class SomeActualData : ISomeData {}
class SomeOtherData : ISomeData {}
interface ISomeInterface
{
void DoSomething(ISomeData data);
}
class SomeImplementation : ISomeInterface
{
public void DoSomething(ISomeData data)
{
dynamic specificData = data;
HandleThis( specificData );
}
private void HandleThis(SomeActualData data)
{ /* ... */ }
private void HandleThis(SomeOtherData data)
{ /* ... */ }
}如果没有采用具体类型的重载方法,您只需捕获Runtime异常并按您希望的方式进行处理即可。
不使用dynamic的等价物是:
public void DoSomething(ISomeData data)
{
if(data is SomeActualData)
HandleThis( (SomeActualData) data);
else if(data is SomeOtherData)
HandleThis( (SomeOtherData) data);
...
else
throw new SomeRuntimeException();
}发布于 2017-01-23 17:10:31
正如微软在here中所描述的,动态可以使设计不佳的外部库更易于使用:微软提供了Microsoft.Office.Interop.Excel程序集的示例。使用dynamic,您可以在使用此程序集时避免许多恼人的显式强制转换。
此外,与@user2415376相反,它绝对不是一种处理接口的方法,因为从语言诞生之初我们就已经实现了多态性!
您可以使用
ISomeData specificData = data;而不是
dynamic specificData = data;此外,它将确保您不会传递错误类型的数据对象。
https://stackoverflow.com/questions/2674906
复制相似问题