在VB6中,Public Property、Friend和Public Variable有什么区别?

12
好的,我了解到在VB6中,类中的封装属性可以归属于以下三种类别之一:
  • 公共属性(Public Property)
  • 友元属性(Friend)
  • 公共变量(Public Variable)
这些有什么区别?在像C#这样的现代语言中,这些与公共和私有属性有什么比较之处呢?

3
嗯,你忘记了私有属性。无论如何,这些根本性的问题都可以通过阅读手册轻松回答。 - Bob77
3个回答

17
作用域限定符PublicFriend确定了不同项目中的客户端是否可以访问该项。
  • Public项可供其他项目中的客户端代码和同一项目中的代码访问1
  • Friend项仅可由同一项目中的代码访问,而不能由其他项目中的代码访问。
  • Private项仅可由同一类中的代码访问。
属性公共变量不同,因为您可以在客户端获取或设置值时执行自己的代码2。注意:变量可以通过引用传递到函数中,并且更改将起作用。属性则不行。
注:C#可能更现代,但我认为VB6对属性和公共变量的处理比.Net更好。链接
  • 在VB6中,您可以将公共变量更改为属性,而不会破坏客户端。您甚至不必重新编译它们。在.Net中不是这样的。
  • 在VB6中,公共变量可以与数据绑定一起使用。在.Net中不是这样的。
在VB6中,公共变量可以与接口一起使用。在.NET中不是这样的
在.NET中,Microsoft创造了属性和公共字段之间的这些差异,我认为这是一个真正的设计错误。不相信吗?在.NET首次发布后,C#VB编译器被修改以支持自动实现的属性。这使您可以只用一行代码创建属性,以便稍后可以在获取/设置时添加逻辑而不会引起问题。我认为这证明了公共变量应该与属性无法区分。
注1:假设您的项目类型实际上允许其他项目使用您的类(即ActiveX DLL、OCX或ActiveX exe)。
注2:在“Property Get”、“Property Let”和“Property Set”程序中。

在VB6中,类中定义的公共变量在编译时会被隐式地编译为属性。可以使用诸如OLE View之类的工具来检查编译后的dll文件,从而看到这一点。它们相当于您提到的“自动实现属性”。 - tcarvin
抱歉,当我看到"In VB6 you can change a public variable into a property without breaking the clients"时,我认为这可能会给OP留下VB6在公开类中具有公共变量的印象。 - tcarvin
1
还要注意,变量可以通过引用传递给函数,并且更改将按预期工作。但是对于属性来说并非如此。我认为这就是它们在.NET/IL中被拆分为字段和属性的原因。 - Deanna

3
  • Public表示它可以被任何引用你的项目 / dll的其他类访问。
  • Friend表示它可以被你程序集内的任何其他类访问(只有你创建该类的exe)

变量和属性几乎相同。建议使用属性,因为您可以设置其他类是否可以设置或获取变量(属性封装变量)

在C#中也是一样的,只是用Internal代替Friend


1
私有财产是指我们自己和其他家庭成员使用的财产。而公共财产是指由我们社区、社会或国家所有人使用的财产。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接