Vb.net Net公共财产
通过对我的程序进行代码分析,我经常收到以下警告: CA1051:Microsoft.Design:由于字段“Form1.Testcode”在其声明类型之外可见,请将其可访问性更改为private,并添加一个与该字段当前具有相同可访问性的属性,以提供对该字段的访问 因此,它告诉我,要么将代码改为:publictestcode为String 对此:公共属性Testcode作为字符串 或为此:Vb.net Net公共财产,vb.net,properties,private,public,Vb.net,Properties,Private,Public,通过对我的程序进行代码分析,我经常收到以下警告: CA1051:Microsoft.Design:由于字段“Form1.Testcode”在其声明类型之外可见,请将其可访问性更改为private,并添加一个与该字段当前具有相同可访问性的属性,以提供对该字段的访问 因此,它告诉我,要么将代码改为:publictestcode为String 对此:公共属性Testcode作为字符串 或为此: Private _testcode Public Property Testcode As Object
Private _testcode
Public Property Testcode As Object
Get
Return _testcode
End Get
Set(value As Object)
_testcode = value
End Set
End Property
所以我的问题是,这两个代码建议之间的区别是什么。
是一个比另一个快还是它能防止bug或其他什么?从那以后,我一直在使用第一个代码,从来没有遇到过问题,也没有感觉到滞后或其他问题
如果我想让我的程序尽可能快,我应该将我必须的代码更改为属性代码,如果是,选择哪一个?属性的要点是,它们的行为与外部的字段类似,但与内部的方法类似。事实上,一旦编译了代码,属性的getter和setter实际上就是方法。Java不支持属性,但即使在那里,约定也是声明一个字段私有,然后声明两个获取和设置字段值的方法 始终使用属性公开数据。如果没有其他内容,则意味着您可以绑定该类型的对象,因为属性支持数据绑定,而字段不支持。如果以后需要更改实现,那么也就不太可能需要更改类型接口 至于如何实现该属性,请始终使用自动属性,即单行选项,除非您需要添加额外代码来执行验证或引发事件等操作。如果您编写一个auto属性,私有字段仍然在幕后创建——您甚至可以在代码中访问它——编译器仍然创建getter和setter方法。简言之,我更喜欢这样: 作为某种类型的公共属性数据 为此: 私有数据作为某种类型 作为某种类型的公共属性数据 收到 返回数据 结束 设置 _数据=值 端集 端属性 需要全部财产的情况示例如下: 私有_数为整数 属性号为整数 收到 返回号 结束 设置 “验证 如果值<0,则 抛出新ArgumentOutOfRangeExceptionvalue,$'Number'不能小于零。 如果结束 如果_数值,则 _数字=值 '更改通知。 OnNumberChangedEventArgs.Empty 如果结束 端集 端属性 公共事件编号已更改为EventHandler 受保护的可重写子OnNumberChange为EventArgs 升起事件编号更改DME,e 端接头
属性的要点是,它们的行为与外部的字段类似,但与内部的方法类似。事实上,一旦编译了代码,属性的getter和setter实际上就是方法。Java不支持属性,但即使在那里,约定也是声明一个字段私有,然后声明两个获取和设置字段值的方法 始终使用属性公开数据。如果没有其他内容,则意味着您可以绑定该类型的对象,因为属性支持数据绑定,而字段不支持。如果以后需要更改实现,那么也就不太可能需要更改类型接口 至于如何实现该属性,请始终使用自动属性,即单行选项,除非您需要添加额外代码来执行验证或引发事件等操作。如果您编写一个auto属性,私有字段仍然在幕后创建——您甚至可以在代码中访问它——编译器仍然创建getter和setter方法。简言之,我更喜欢这样: 作为某种类型的公共属性数据 为此: 私有数据作为某种类型 作为某种类型的公共属性数据 收到 返回数据 结束 设置 _数据=值 端集 端属性 需要全部财产的情况示例如下: 私有_数为整数 属性号为整数 收到 返回号 结束 设置 “验证 如果值<0,则 抛出新ArgumentOutOfRangeExceptionvalue,$'Number'不能小于零。 如果结束 如果_数值,则 _数字=值 '更改通知。 OnNumberChangedEventArgs.Empty 如果结束 端集 端属性 公共事件编号已更改为EventHandler 受保护的可重写子OnNumberChange为EventArgs 升起事件编号更改DME,e 端接头 见: 为自动实现的属性编写代码时,Visual Basic 编译器自动创建一个私有字段来存储属性 除了创建关联的Get和Set之外,还可以使用 程序 所以使用sh 符号和符号:
Public Property Testcode As String
编译时,将生成与较长的verbose属性相同的代码
最后没有区别。参见:
为自动实现的属性编写代码时,Visual Basic
编译器自动创建一个私有字段来存储属性
除了创建关联的Get和Set之外,还可以使用
程序
因此,使用速记法:
Public Property Testcode As String
编译时,将生成与较长的verbose属性相同的代码
最终没有什么不同
一个比另一个快吗?不
它能防止虫子或其他什么吗?是的。
在VB中,作为字符串的公共测试代码和作为字符串的公共属性测试代码看起来几乎相同。但是让我们把语法放在一边,我们在这里谈论的是成员变量和属性
成员变量是您必须在类中使用的变量,因为它们必须与类实例一样存在。它与其他变量基本相同,但没有定义上下文,例如方法的结尾。您通常会使用它们来保存某种状态,例如用户是否确认了消息或类似的内容。如果这类信息对类的逻辑很重要,但对其他类不重要,那么您就有了一个完美的成员变量候选者
这里的属性差别不大,技术上可以使用相同的属性。但是,它们是外部接口的一部分。如果您必须保存对您的类以及使用您的类的其他类非常重要的信息,那么您就有了一个完美的属性候选者。例如,这可能是按钮的边框颜色。其他类可能根据给定的设计设置颜色,当然,按钮本身需要它来相应地渲染边框。公共方法和属性构建其他方可以交互的接口。这里有一些关于StackOverflow的有用答案,我将在下面链接它们,而不是复制它们的内容
我们为什么要关心?
所以我们基本上是在讨论封装和。但让我们看一个更实际的例子
看看你的台式电脑。把它转过来,看看它暴露的所有连接器。这是机器的公共接口。作为机器的消费者,你可以与之互动。您可以看到USB端口、HDMI接口等。您不需要了解机器的内部结构,就可以了解鼠标可以连接到哪里,或者如何将HDMI连接到DisplayPort适配器。事实上,如果电脑背面的每个内部接口都可以使用,那将非常令人困惑。这会增加太多不必要的混乱,也会使事情变得危险。因为你没有机会知道所有这些引脚和连接器是为什么而做的。硬件制造商不能依赖于预期条件,因为任何人都可能在不知情的情况下从外部把事情搞砸了
作为消费者,您可以与之交互的所有内容都通过标准连接器的接口公开。机器内部工作所需的一切都远离您,以避免您对不需要了解的事情产生混淆,并确保没有人会干扰机器必须依赖的内部状态
所以你可以说,让我们把一切公开,因为我没有秘密,但事实上,这会让课堂很难从外部理解。通过从外部代码中设置成员,您的类可以在内部处理并依赖外部代码,从而很容易在不知情的情况下破坏内容
我们作为软件开发人员必须记住的另一个方面是:可维护性。如果您有很多公共成员,那么在进行重构时,您会被锁定,因为您永远不知道有人是如何使用它们的。保持与外部的干净接口对于以后能够在内部进行更改非常重要
见:
一个比另一个快吗?不
它能防止虫子或其他什么吗?是的。
在VB中,作为字符串的公共测试代码和作为字符串的公共属性测试代码看起来几乎相同。但是让我们把语法放在一边,我们在这里谈论的是成员变量和属性
成员变量是您必须在类中使用的变量,因为它们必须与类实例一样存在。它与其他变量基本相同,但没有定义上下文,例如方法的结尾。您通常会使用它们来保存某种状态,例如用户是否确认了消息或类似的内容。如果这类信息对类的逻辑很重要,但对其他类不重要,那么您就有了一个完美的成员变量候选者
这里的属性差别不大,技术上可以使用相同的属性。但是,它们是外部接口的一部分。如果您必须保存对您的类以及使用您的类的其他类非常重要的信息,那么您就有了一个完美的属性候选者。这可能是边境公司
例如,按钮的颜色。其他类可能根据给定的设计设置颜色,当然,按钮本身需要它来相应地渲染边框。公共方法和属性构建其他方可以交互的接口。这里有一些关于StackOverflow的有用答案,我将在下面链接它们,而不是复制它们的内容
我们为什么要关心?
所以我们基本上是在讨论封装和。但让我们看一个更实际的例子
看看你的台式电脑。把它转过来,看看它暴露的所有连接器。这是机器的公共接口。作为机器的消费者,你可以与之互动。您可以看到USB端口、HDMI接口等。您不需要了解机器的内部结构,就可以了解鼠标可以连接到哪里,或者如何将HDMI连接到DisplayPort适配器。事实上,如果电脑背面的每个内部接口都可以使用,那将非常令人困惑。这会增加太多不必要的混乱,也会使事情变得危险。因为你没有机会知道所有这些引脚和连接器是为什么而做的。硬件制造商不能依赖于预期条件,因为任何人都可能在不知情的情况下从外部把事情搞砸了
作为消费者,您可以与之交互的所有内容都通过标准连接器的接口公开。机器内部工作所需的一切都远离您,以避免您对不需要了解的事情产生混淆,并确保没有人会干扰机器必须依赖的内部状态
所以你可以说,让我们把一切公开,因为我没有秘密,但事实上,这会让课堂很难从外部理解。通过从外部代码中设置成员,您的类可以在内部处理并依赖外部代码,从而很容易在不知情的情况下破坏内容
我们作为软件开发人员必须记住的另一个方面是:可维护性。如果您有很多公共成员,那么在进行重构时,您会被锁定,因为您永远不知道有人是如何使用它们的。保持与外部的干净接口对于以后能够在内部进行更改非常重要
见:
这与速度/性能无关。字段通常对类保持私有,并使用属性“”访问。这允许在从类中检索数据时有一个抽象级别。理论上,您可以在返回值之前在属性内进行验证,或者在不影响访问该值的外部类的情况下更改字段实现。此外,您可以使用属性设置数据的访问级别,例如使其为只读。它与速度/性能无关。字段通常对类保持私有,并使用属性“”访问。这允许在从类中检索数据时有一个抽象级别。理论上,您可以在返回值之前在属性内进行验证,或者在不影响访问该值的外部类的情况下更改字段实现。此外,您可以使用属性(例如,使数据为只读)设置数据的访问级别