gpt4 book ai didi

c# - 返回动态的接口(interface)方法

转载 作者:太空狗 更新时间:2023-10-30 00:31:38 25 4
gpt4 key购买 nike

如果在 .NET 4.0 发布时,所有接口(interface)方法都从返回 object 更改为返回 dynamic,会有什么缺点吗?

现有代码不必因此而改变,因为底层类型仍然相同,并且它会稍微减少冗长的代码。

public class MyClass : IClonable
{
//...
public object Clone()
{
//...
return new MyClass(...);
}
}

MyClass foo = new MyClass(...);
MyClass bar = foo.Clone() as MyClass;

唯一减少上述代码冗长的方法是将 foobar 的声明更改为 var

现在,如果 IClonable.Clone() 返回一个 dynamic,底层类(在运行时)仍然是 MyClass,但是代码会变得稍微不那么冗长:

MyClass foo = new MyClass(...);
MyClass bar = foo.Clone();

这样的改变会有什么缺点吗?

最佳答案

此更改的一个缺点是编译器无法捕获拼写错误引起的错误。例如,如果你写了

if (foo.Clone().Equalls(foo)) {
// ^^
// ||
// Here is a typo ==++
}

当您的Clone() 返回一个对象 时,编译器会捕获它。通过对 dynamic 的更改,编译器会接受它,因此您的程序会为缺少的方法抛出运行时异常。

关于c# - 返回动态的接口(interface)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24072631/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com