在VS2010中,对于VB.NET 4.0项目,IDE在以下代码的最后一行下面放置一条绿线:
Dim cityLocal As DateTime
cityLocal = externalFunction()
cityLocal.Today()
建议的代码替换是用'Date'更新'cityLocal'。原因是: 通过实例访问共享成员,常量成员,枚举成员或嵌套类型;不会评估合格表达式。
但它确实编译并且确实可以正常工作。这只是VS2010中的一个错误吗?
答案 0 :(得分:3)
今天是共享成员,因此不应该(但可以)通过DateTime实例访问,将代码更改为。
DateTime.Today
虽然Visual Studio为您提供了纠正“错误”的建议,但它实际上是编译器警告,警告您不需要实例来访问共享成员。您会发现它未在错误列表中列为错误。这就是它正确编译的原因。
Visual Basic语言规范说明
9.2.4共享方法
共享修饰符表示方法 是一种共享方法。共享方法 不适用于特定的 类型的实例,可以调用 直接来自一个类型而不是 通过一个特定的例子 类型。但是,使用一个是有效的 实例以限定共享方法。
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=01EEE123-F68C-4227-9274-97A13D7CB433:
有关警告的更多信息,请参阅文档。
答案 1 :(得分:0)
Date.Today
是static
(VB.NET中的Shared
)属性。您可以从实例中使用它,因为编译器知道进行正确的调用,但它不是预期的使用模式,这对于直接从实例使用来说既不必要也不可取。
作为静态变量,您应该使用Date.Today
而不是variable.Today
。
答案 2 :(得分:0)
今天是共享/静态成员。通常你会使用DateTime.Today
而不是你的实例变量。
http://msdn.microsoft.com/en-us/library/system.datetime.today.aspx