请问vb.net 2005中, public 与 friend 声明的区别是什么?他们的用途各在什么地方?
如果不是很严格的话,我是不是可以这么理解:如果我不打算做一个COM的组件,如果我并不打算在程序外部来访问程序内部的数据的话,就是说我只打算做一个封闭的程序的话,frien...
如果不是很严格的话,我是不是可以这么理解:
如果我不打算做一个COM的组件,如果我并不打算在程序外部来访问程序内部的数据的话,就是说我只打算做一个封闭的程序的话,friend其实是可以替代public的?? 展开
如果我不打算做一个COM的组件,如果我并不打算在程序外部来访问程序内部的数据的话,就是说我只打算做一个封闭的程序的话,friend其实是可以替代public的?? 展开
1个回答
展开全部
修改窗体模块或者类模块中的一个过程的定义,使得该过程可以被类外的模块调用,但必须是在定义该类的工程的部分内。Friend 过程在标准的模块中是不能使用的。
Friend 只能出现在窗体模块和类模块中,并且只能修改过程的名称,不能修改变量或者类型。一个类中的过程可以访问某个工程所有其它类的 Friend 过程。Friend 过程不会出现在类的类型库中。一个 Friend 过程不能被后期绑定。
Friend 示例
当下面的代码被放置在一个类模块中时,该段代码会使得成员变量 dblBalance 对该工程中的类的所有用户来说都是可访问的。类的任何用户都可以获得该变量的值;但是只有工程内的代码可以对该变量赋值。
Private dblBalance As Double
Public Property Get Balance() As Double
Balance = dblBalance
End Property
Friend Property Let Balance(dblNewBalance As Double)
dblBalance = dblNewBalance
End Property
说得很清楚了。
另外,Friend类型过程的执行速度要明显快于Public类型。Friend型过程没有处理汇集和拆装代码的消耗(Public过程可以从当前工程外被调用,因此COM必须要来回地汇集数据)。 但是在多数情况下,这些时间差别是不明显的,特别是程序中包含一些复杂和耗时的语句时。 即使这样,Friend型过程仍有其他的优势高于Public类型,比如:接受和返回在BAS模块中定义的UDT变量的能力。
Friend 只能出现在窗体模块和类模块中,并且只能修改过程的名称,不能修改变量或者类型。一个类中的过程可以访问某个工程所有其它类的 Friend 过程。Friend 过程不会出现在类的类型库中。一个 Friend 过程不能被后期绑定。
Friend 示例
当下面的代码被放置在一个类模块中时,该段代码会使得成员变量 dblBalance 对该工程中的类的所有用户来说都是可访问的。类的任何用户都可以获得该变量的值;但是只有工程内的代码可以对该变量赋值。
Private dblBalance As Double
Public Property Get Balance() As Double
Balance = dblBalance
End Property
Friend Property Let Balance(dblNewBalance As Double)
dblBalance = dblNewBalance
End Property
说得很清楚了。
另外,Friend类型过程的执行速度要明显快于Public类型。Friend型过程没有处理汇集和拆装代码的消耗(Public过程可以从当前工程外被调用,因此COM必须要来回地汇集数据)。 但是在多数情况下,这些时间差别是不明显的,特别是程序中包含一些复杂和耗时的语句时。 即使这样,Friend型过程仍有其他的优势高于Public类型,比如:接受和返回在BAS模块中定义的UDT变量的能力。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询