gpt4 book ai didi

.net - VB.NET 中的默认属性?

转载 作者:行者123 更新时间:2023-12-03 09:18:01 24 4
gpt4 key购买 nike

在 .NET 的早期,我相信有一个属性可以用来装饰类以指定默认属性。

根据我发现的一些文章,这似乎在某个时候从框架中删除了,因为它有点令人困惑,我可以看到情况如何。

还有其他方法可以获得它提供的功能吗?

它看起来像这样:

<DefaultProperty("Value")> _  
Public Class GenericStat
...
Public Property Value() As Integer
...
End Property
...
End Class

这允许你做 Response.Write(MyObject)而不是 Response.Write(MyObject.Value) ... 这不是一个非常笨重的例子,但在一些复杂的面向对象的上下文中,它变得有点可怕。请让我知道是否有更好的方法。

注意:我不是在寻找 Default 关键字,它只能用于带参数的属性。

最佳答案

嗯,.NET 框架确实有一个默认成员的概念。关键成分是 DefaultMemberAttribute 类和 Type.GetDefaultMembers()。在 VB.NET 中,指定默认成员是语言语法的一部分:

  Public Class Sample
Private mValue As Integer
Default Public ReadOnly Property Test(ByVal index As Integer) As Integer
Get
Return index
End Get
End Property
End Class

像这样使用它:
  Sub Main()
Dim s As New Sample
Console.WriteLine(s(42))
Console.ReadLine()
End Sub

编译器通过自动发出 [DefaultMember] 来实现这一点。然而,这有一个限制,该属性必须有一个索引参数,特别是为了避免语法歧义。明确指定属性时,不会强制执行此限制:
  <System.Reflection.DefaultMember("AnotherTest")> _
Public Class Sample
Public ReadOnly Property AnotherTest() As Integer
Get
Return 42
End Get
End Property
End Class

但是该默认成员只能通过允许这种语法的语言作为默认访问。我不知道 .NET 中的示例,这在 COM 时代就已使用,例如 VB6。同样是 VB6 具有 Set 关键字的核心原因,它解决了歧义并指出“我的意思是对象,而不是对象的默认属性”。对于当时许多初学 Visual Basic 的程序员来说,非常痛苦的语法细节。

C# 具有完全相同的规则,但不允许具有相同的灵活性。您之前可能已经看过索引器:
  public class Sample {
public int this[int index] {
get { return index; }
}
}

此代码还使编译器输出 [DefaultMember] 属性。该属性中的命名属性是“Item”。这就是为什么您会看到索引器在 MSDN 库中记录和索引为“项目”。

关于.net - VB.NET 中的默认属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/293215/

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