Aveva Marine VBNET 编程系列-封装一个类
由于AM的marapi的大部分类实现了IDisposable接口,所有避免内存过大,用了一般需要dispose下
微软官方的解释:
https://learn.microsoft.com/zh-cn/dotnet/api/system.idisposable?view=net-7.0
以下是MarDrafting类的定义,很显然它实现了IDisposable接口
Imports System.Reflection Imports Aveva.Marine.Drafting Imports Aveva.Marine.UI ' marAPI.dll Imports Aveva.Marine.Utility ' marAPI.dll Public Class AmEnvironment Implements IDisposable Private disposedValue As Boolean Public Property DraftApp As New MarDrafting Public Property MarUI As New MarUi Public Property MarUtility As New MarUtil Sub New() End Sub Protected Overridable Sub Dispose(disposing As Boolean) If Not disposedValue Then If disposing Then Dim t As Type = Me.GetType() Dim pros = t.GetProperties().Where(Function(p) p.PropertyType.Namespace IsNot Nothing And p.PropertyType.Namespace.StartsWith("Aveva.Marine.")) For Each pi As PropertyInfo In pros Dim tp = pi.PropertyType Dim obj As IDisposable = pi.GetValue(Me, Nothing) obj.Dispose() Next ' TODO: 释放托管状态(托管对象) End If ' TODO: 释放未托管的资源(未托管的对象)并重写终结器 ' TODO: 将大型字段设置为 null disposedValue = True End If End Sub ' ' TODO: 仅当“Dispose(disposing As Boolean)”拥有用于释放未托管资源的代码时才替代终结器 ' Protected Overrides Sub Finalize() ' ' 不要更改此代码。请将清理代码放入“Dispose(disposing As Boolean)”方法中 ' Dispose(disposing:=False) ' MyBase.Finalize() ' End Sub Public Sub Dispose() Implements IDisposable.Dispose ' 不要更改此代码。请将清理代码放入“Dispose(disposing As Boolean)”方法中 Dispose(disposing:=True) GC.SuppressFinalize(Me) End Sub End Class
使用方法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具