加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

VB.NET中的默认属性?

发布时间:2020-12-16 23:52:45 所属栏目:大数据 来源:网络整理
导读:在.NET的早期,我相信有一个属性,你可以装饰一个类,指定一个默认属性。 根据我发现的一些文章,这似乎是从框架在某个时候被嘲笑,因为它是一个有点混乱,我可以看到这是这样的情况。 但是,有没有另一种方式来获得它提供的功能? 它看起来像这样: Default
在.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库中记录和索引为“项目”。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读