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库中记录和索引为“项目”。

相关文章

Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强...
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办...
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace...
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用...
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选...
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As Dat...