惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
Secure Thoughts
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
S
Securelist
云风的 BLOG
云风的 BLOG
M
MIT News - Artificial intelligence
Engineering at Meta
Engineering at Meta
雷峰网
雷峰网
C
CERT Recently Published Vulnerability Notes
H
Hackread – Cybersecurity News, Data Breaches, AI and More
S
SegmentFault 最新的问题
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
K
Kaspersky official blog
WordPress大学
WordPress大学
I
Intezer
L
Lohrmann on Cybersecurity
V
Vulnerabilities – Threatpost
C
Check Point Blog
A
About on SuperTechFans
AWS News Blog
AWS News Blog
Latest news
Latest news
宝玉的分享
宝玉的分享
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
小众软件
小众软件
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
C
Cyber Attacks, Cyber Crime and Cyber Security
SecWiki News
SecWiki News
Recorded Future
Recorded Future
Last Week in AI
Last Week in AI
D
Darknet – Hacking Tools, Hacker News & Cyber Security
The Register - Security
The Register - Security
A
Arctic Wolf
V2EX - 技术
V2EX - 技术
Hacker News: Ask HN
Hacker News: Ask HN
V
V2EX
Scott Helme
Scott Helme
I
InfoQ
Project Zero
Project Zero
Security Archives - TechRepublic
Security Archives - TechRepublic
Recent Announcements
Recent Announcements
Spread Privacy
Spread Privacy
Attack and Defense Labs
Attack and Defense Labs
大猫的无限游戏
大猫的无限游戏
Webroot Blog
Webroot Blog
N
News and Events Feed by Topic
博客园 - 司徒正美
Microsoft Security Blog
Microsoft Security Blog
The GitHub Blog
The GitHub Blog
NISL@THU
NISL@THU
L
LangChain Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com

博客园 - Felix Liang

精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件 精进 Spring Boot 02 | Spring Boot 的文档结构、POM 文件格式的介绍,以及 Maven 的使用。 精进 Spring Boot 01 | Spring Boot 入门,用 Spring Boot 写第一个 Hello World How do I get started with Node.js 修改xampp的mysql默认密码和端口 Visual Studio 2013 错误系统找不到指定文件,0x80070002 Daily Build H公司数据同步的总结 VB2010新特性之——标识语言版本的新命令行选项/langversion (Visual Basic) 为什么开发人员不能估算时间? [翻译]SQL Server 未公开的两个存储过程sp_MSforeachtable 和 sp_MSforeachdb 获取应用程序的根Url - Felix Liang - 博客园 Lambda 表达式 Lambda Expressions (Visual Basic) 集合初始化器概览(Visual Basic) 宽松委托转换(Relaxed delegate conversion) VB2010 的隐式续行(Implicit Line Continuation) Visual Basic 2010 新特性 VS2008 Tips #009 – 您可以在 ASP.NET 的 Web.config 文件中注册用户控件 VS2008 Tips #008 如何创建ASP.NET Web 用户控件并包含在Web 页面中 - Felix Liang
自动实现属性
Felix Liang · 2010-05-15 · via 博客园 - Felix Liang

自动实现属性Auto-Implemented Properties (Visual Basic)

自动实现属性允许您快速定义类的属性,而不用编写代码来获取和设置属性。当您编写了自动实现属性,Visual Basic 编译器不仅自动创建 Get 和 Set 子过程,还创建私有字段(private field)来存储属性变量(property variable)。

有了自动实现属性,属性和默认值就可以在单行代码中声明。下面代码演示了3个属性的声明(declaration)。

Public Property Name As String

Public Property Owner As String = "DefaultName"

Public Property Items As New List(Of String) From {"M", "T", "W"}

Public Property ID As New Guid()

自动实现属性等同于属性值存储在私有字段的属性,下面代码演示自动实现属性。

Property Prop2 As String = "Empty"

下面代码展示上面自动实现属性的等价形式:

Private _Prop2 As String = "Empty"

Property Prop2 As String

Get

Return _Prop2

End Get

Set(ByVal value As String)

_Prop2 = value

End Set

End Property

背后字段Backing Field

当你声明一个自动实现属性,Visual Basic 自动创建一个称为背后字段(backing field)的隐藏私有字段来存储属性值。背后字段的名称是自定义属性名加了下划线。例如,定义一个名为 ID 的自动实现属性,背后字段就是 _ID,如果您的类中包含成员 _ID,将产生名字冲突,Visual Basic 会报告编译错误。

背后字段有下面的特性:

  • 背后字段的访问修饰符(access modifier)总是 private,尽管属性有其它的存储级别,如 public。

  • 如果属性标识为Shared,背后字段也是Shared。

  • 修饰属性的属性类(Attribute)不会应用到背后字段。

  • 背后字段可以在类的代码中访问,或在调试工具如 Watch 窗口中访问。然而,背后字段不会在智能提示列表中显示。

初始化自动实现属性

任何可以初始化字段的表达式,都能用来初始化自动实现属性。当你初始化自动实现属性时,表达式被计算,然后传给属性的 Set 子过程。下面代码展示包含初始值的自动实现属性。

Property FirstName As String = "James"

Property PartNo As Integer = 44302

Property Orders As New List(Of Order)(500)

若自动实现属性是接口(Interface)或者标识为 MustOverride的类的成员,不可以初始化。

若自动实现属性是结构体(Structure )的成员,只有自动实现属性标识为 Shared 时才可初始化。

若将自动实现属性声明为数组,不可以给数组标识精确边界。然而,您可以用数组初始化器(array initializer)来赋值,像下面这样:

Property Grades As Integer() = {90, 73}

Property Temperatures As Integer() = New Integer() {68, 54, 71}

必须用标准语法的属性定义

自动实现属性非常方便,而且适用于许多编程场合。然而有许多情形,您不能使用自动实现属性,而必须使用标准的或者扩展的(expanded)属性语法。

您如果想做下面的事情,必须使用扩展的属性定义语法:

  • 在 Get 或 Set 子过程中添加代码。例如,你在设置电话号码属性值前,希望验证字符串是否包含正确位数。

  • 给 Get 和 Set 子过程标识不同的访问性(accessibility)。例如,你想把 Set 子过程标识为 Private 而把 Get 子过程标识为 Public。

  • 创建 WriteOnly 或 ReadOnly 的属性。

  • 使用参数化的属性(包含默认属性)。您必须声明一个扩展的属性来给属性标识参数,或者给 Set 子过程标识额外参数。

  • 给背后字段限定属性类(attribute)。

  • 给背后字段提供 XML 注释。

扩展自动实现属性

如果您希望将自动实现属性转换为包含 Get 或 Set 子过程的扩展属性,Visual Basic 代码编辑器可以给属性自动生成 Get 和 Set 子过程和 End Property 语句。做法是:将光标定位在属性语句的下一空白行,输入 G(Get首字母)或 S(Set首字母),等智能提示框弹出后再按下 Enter 键。若在只读或只写属性语句尾部按下 Enter 键,Visual Basic 代码编辑器自动生成 Get 或 Set 子过程。