.NET:将Self传递给子对象

时间:2011-11-08 19:45:19

标签: .net vb.net

我偶尔会发现自己将thisMe传递给子对象。比如这个浓缩的现实世界的例子......

Public Class Entity

    Private mValidator as New EntityValidator()

    Readonly Property IsValid()
        Return mValidator.Validate(Me)
    End Property

End Class

我很关心.Validate(Me)。我没有收到警告或违反代码分析,但感觉不对。我对无限递归和垃圾收集感到紧张。

我们在项目上有内存泄漏,我想知道是否是由此造成的。我从来没有找到任何解决这个问题的资源。

这种做法是否正常,或者我的偏执是值得的?

2 个答案:

答案 0 :(得分:3)

这本身不会导致内存泄漏,将this传递给另一个对象并不存在任何错误。但是,我会警惕第二个对象实际上保留对传入对象的引用的情况,因为循环引用通常会导致可理解性和可维护性方面的问题。

答案 1 :(得分:1)

VB和C#中允许循环引用。引用基本上只是内存中机器WORD大小的值。如果有一个对象A和B,并且如果A指向B和B指向A,则A内部只保存一个指向实际对象B的值,而B只有一个指向A的实际对象的值。 / p>

其他人比我更好地解释循环引用,尝试this thread, about circular references并检查第一个答案。但简而言之:不,它们不会损害您的程序,它们是允许的,有效的,甚至是普通的。

如果您想了解内存泄漏的来源,请尝试进行内存分析。