gpt4 book ai didi

c# - 如何创建一次性类

转载 作者:太空狗 更新时间:2023-10-30 00:51:43 31 4
gpt4 key购买 nike

我有这个“PlayerClass”类,每次实例化它时我都需要处理它,包括该类中的字段。有办法吗?这是我的课:

internal class PlayerClass 
{
public WindowsMediaPlayer _wplayer;
}

如何在使用后处理该类?我试图在互联网上找到一种方法,但在测试后没有一种方法有效。

我已经试过了:

internal class PlayerClass : IDisposable
{
public WindowsMediaPlayer _wplayer;
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}

/// <summary>
/// Is this instance disposed?
/// </summary>
protected bool Disposed { get; private set; }

/// <summary>
/// Dispose worker method. See http://coding.abel.nu/2012/01/disposable
/// </summary>
/// <param name="disposing">Are we disposing?
/// Otherwise we're finalizing.</param>
protected virtual void Dispose(bool disposing)
{
Disposed = true;
}
}

我做错了什么?

最佳答案

它看起来好像您正在实现 IDisposable 只是为了它,这对于 托管代码 不是必需的。垃圾收集器会在你身后自动清理。

您可能需要在帖子中阐明为什么您正在实现IDisposable

但是我认为您的错误是垃圾收集器不会自动调用 Dispose()。如果您确实实现了 IDisposable,则必须确保使用您的类的代码在 using() 语句内实例化或手动调用 .Dispose。否则您的 dispose 方法将永远不会触发。

using(var player = new PlayerClass()){
// Do something with player
// player.Dispose() is called automatically when you exit this using statement.
}

由于您依赖调用者来确保调用Dispose,您可能还想查看SafeHandle(首选)或Finalize.

Because the IDisposable.Dispose implementation is called by theconsumer of a type when the resources owned by an instance are nolonger needed, you should either wrap the managed object in aSafeHandle (the recommended alternative), or you should overrideObject.Finalize to free unmanaged resources in the event that theconsumer forgets to call Dispose.

来源:IDisposable Interface

使用声明 https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/using-statement

关于c# - 如何创建一次性类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25395543/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com