VB.NET中的默认属性?

前端之家收集整理的这篇文章主要介绍了VB.NET中的默认属性?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在.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库中记录和索引为“项目”。

猜你在找的VB相关文章