如何妥善处理课程?

时间:2014-08-19 20:07:48

标签: .net vb.net dispose

VB.Net 2010.我有一个带定时器和其他一些东西的课程,即

Public Class PlayerClass
    Inherits BodyClass

    '//Variables For TCP/IP Functions
    Public Property ClassInstance As UserClass
    Private Account As String
    Private IP As String
    Private HungerTimer As Timer

    Public Property LeftGrip As WeaponClass
    Public Property RightGrip As WeaponClass

    Public Sub New(....blahblah..)
     ...stuff
     ...
    End Sub
End Class

当我创建类时,我初始化所有内容(New Timer(),New WeaponClass(datahere)等)。

我遇到了正确处理的问题。我发现设置为初始化类没有任何东西并没有正确处理它,因为定时器一直在运行,我猜测GC出现时内存没有被释放。

我一直在网上阅读很多,但我很困惑,因为很多人都有很多答案。我是否打电话给.Dispose()?我是否必须停止计时器并处理它们,或者只是处理它们(如果那样)?我是否会处理其他类别,例如“LeftGrip”和“#G;和' RightGrip'?

所以主要想知道这里最好的方法是什么。公共财产/私人影响是否完全处置?

谢谢!

1 个答案:

答案 0 :(得分:4)

只需遵循.NET指南即可。如果一个类有任何一次性成员,那么它应该实现IDisposable本身。像这样:

Public Class PlayerClass
    Inherits BodyClass
    Implements IDisposable

    Public Sub Dispose() Implements IDisposable.Dispose
        HungerTimer.Dispose()
    End Sub

    '' etc...
End Class

所以当你完成一个PlayerClass对象时,你可以简单地处理它,并且计时器也会停止滴答作响。对于System.Timers.Timer来说,非常小心,这是一个非常讨厌的类。首先,即使在处理完计时器之后,它仍然可以触发您编写的Elapsed事件处理程序。对于另一个,它的Elapsed事件在一个工作线程上运行,所以你必须非常小心你对播放器对象做什么。在游戏中,你几乎总是喜欢同步计时器。最常见的是运行游戏时钟,因此暂停游戏等内容变得非常简单。