为什么这个扩展方法在VB.NET中抛出NullReferenceException?
从以往的经验来看,我一直觉得在null实例上调用扩展方法是完全合法的(尽管也许不太可取)。所以在C#中,这段代码编译并运行:
// code in static class static bool IsNull(this object obj) { return obj == null; } // code elsewhere object x = null; bool exists = !x.IsNull(); 但是,我刚刚为我的开发团队的其他成员组装了一个小套件示例代码(我们刚刚升级到.NET 3.5,并且我被赋予了让团队加快一些新功能的任务我写的是我以为VB.NET相当于上面的代码,只是发现它实际上是抛出一个NullReferenceException。我写的代码是: ' code in module ' <Extension()> _ Function IsNull(ByVal obj As Object) As Boolean Return obj Is Nothing End Function ' code elsewhere ' Dim exampleObject As Object = Nothing Dim exists As Boolean = Not exampleObject.IsNull() 调试器停在那里,好像我调用了一个实例方法。我做错了(例如,我在定义C#和VB.NET之间的扩展方法的方式有一些微妙的区别吗?在VB.NET中的null实例上调用扩展方法实际上是不合法的,尽管它在C#中是合法的? (我会以为这是一个.NET的东西,而不是一个特定于语言的东西,但也许我错了) 有人可以向我解释一下吗
您不能在VB.NET中扩展对象类型。
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |