cad.net 修改Point3d字段内容
由于Point3d的字段是设置了set保护,那么我们可以利用不安全操作来进行:
.csproj加入:
<PropertyGroup>
<AllowUnsafeBlocks>True</AllowUnsafeBlocks>
</PropertyGroup>
结构:
准备一个相同的结构,需要直接暴露字段.
(不使用 set get 减少栈帧,因为我们有一亿..百亿个点...真有那么多点SOA结构似乎更好)
[Serializable]
[DebuggerDisplay("{DebuggerDisplay,nq}")]
[DebuggerTypeProxy(typeof(Point3D))]
public struct Point3D
{
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
private string DebuggerDisplay => $"(X:{X},Y:{Y},Z:{Z})";
public double X;
public double Y;
public double Z;
}
测试命令:
[CommandMethod(nameof(Test_Marshal))]
public void Test_Marshal()
{
var dm = Acap.DocumentManager;
var doc = dm.MdiActiveDocument;
var ed = doc.Editor;
Point3d pt = new(100, 50, 0);
ed.WriteMessage("\n原始:" + pt.ToString());
// 将Point3d指针转为Point3D指针,以此避开get保护,实现修改内部值
unsafe
{
((Point3D*)&pt)->X = 12345;//必须强转成这个指针类型,不然它为(Point3d*)
}
ed.WriteMessage("\n指针法:" + pt.ToString());
}
(完)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)