微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

原文地址:https://www.jb51.cc/vb/256209.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐