Tob*_*orn 12 .net c# extension-methods
我们目前正在讨论.NET中的扩展方法是否坏.或者在什么情况下,扩展方法可以引入难以发现的错误或以任何其他方式出乎意料地行为.
我们想出了:
题:
编辑:
另一个非常危险的情况 假设您有一个扩展方法:
namespace Example.ExtensionMethods
{
public static class Extension
{
public static int Conflict(this TestMe obj)
{
return -1;
}
}
}
Run Code Online (Sandbox Code Playgroud)
并使用它:
namespace Example.ExtensionMethods.Conflict.Test
{
[TestFixture]
public class ConflictExtensionTest
{
[Test]
public void ConflictTest()
{
TestMe me = new TestMe();
int result = me.Conflict();
Assert.That(result, Is.EqualTo(-1));
}
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,您使用它的命名空间更长.
现在你用这个引用一个dll:
namespace Example.ExtensionMethods.Conflict
{
public static class ConflictExtension
{
public static int Conflict(this TestMe obj)
{
return 1;
}
}
}
Run Code Online (Sandbox Code Playgroud)
而你的测试将失败!它将编译而没有编译器错误.它会失败.没有你甚至不必指定"使用Example.ExtensionMethods.Conflict".编译器将遍历命名空间名称并在Example.ExtensionMethods.Extension之前找到Example.ExtensionMethods.Conflict.ConflictExtension,并且将使用它而不会抱怨模糊的扩展方法.哦,恐怖!
我不同意,扩展方法的全部意义在于将您的成员添加到黑盒子类中.像其他一切都有陷阱,你必须注意命名,实现和理解方法的啄食顺序.
| 归档时间: |
|
| 查看次数: |
1339 次 |
| 最近记录: |