我有一个实现
IDisposable
的父组件,其中有一个名为 MyGrid
的子组件。现在 MyGrid
扩展了 Syncfusion 的 SfGrid
,它本身实现了 IDisposable
。当我关闭父组件时,会调用其 Dispose
方法,但不会调用 Dispose
内的 MyGrid
。正常吗?我认为 Dispose 具有连锁效应。我应该在 MyGrid
上显式调用 Dispose(在获得对其的引用后)吗?
家长剃刀:
<MyGrid ... />
MyGrid.cs:
public class MyGrid<T> : SfGrid<T>
{
...
public override async void Dispose()
{
await PersistDataAsync();
}
}
我认为你需要使用
DisposeAsync
。它是在 dotnet8 中引入的。使用它可能有点棘手:
MyGrid
是一个密封组件(你不需要编写继承自MyGrid
的其他组件),任务很简单:public sealed class MyGrid<T> : SfGrid<T>, IAsyncDisposable
{
...
public ValueTask DisposeAsync() => PersistDataAsync();
}
MyGrid
不是密封类,那么实现它会有些复杂。我强烈建议您阅读实现 DisposeAsync 方法。
附注我完全同意亨克的观点。在 Dispose 中保留数据不被视为最佳实践。这样做时要小心。