gpt4 book ai didi

c# - 在包装 PInvoke 东西的属性的 get 函数中放置大量代码是不好的做法吗?

转载 作者:行者123 更新时间:2023-11-30 19:22:24 24 4
gpt4 key购买 nike

我知道一个令人困惑的标题。让我解释一下。

我必须编码一个结构数组,然后将其转换为一个类数组(遗留兼容性)。例如

public class InnerClass {}

public class OuterClass { private InnerClass[] innerClasses; }


public struct InnerStruct {
// Data
}

private static buildInnerClass( InnerStruct i );

public struct OuterStruct {
private int _numInnerStructs;
private IntPtr _innerStructs;
// Other members

public InnerClass[] InnerClasses {
get {
InnerClass[] ret = new InnerClass[_numInnerStructs];

var structSize = Marshal.SizeOf(typeof(InnerStruct));
var ptr = _innerStructs;

for (int i = 0; i < _numInnerStructs; i++)
{
InnerStruct innerStruct = (InnerStruct)Marshal.PtrToStructure(
ptr, typeof(InnerStruct));
ret[i] = buildInnerClass(innerStruct);
ptr = (IntPtr)((int)ptr + structSize);
}
return ret;
}
}

}

最佳答案

从真空中看,这种做法本质上没有错。但是,你应该小心......

  1. 属性 getter 应该——除了少数(如果有的话)异常(exception)——不是“昂贵的”(即,不应该消耗很多 CPU 周期或资源来执行)
  2. Property getters 应该永远不会产生副作用。例如,如果您的 PInvoke 代码获得某种新句柄,那么它应该是一个函数,而不是 getter。

一般而言,请记住属性的编写方式应使消费者没有太多(如果有的话)缓存值而不是再次调用属性的理由。如果负责任的开发商可以在您的属性(property)上遵循这种做法,那么您就走在了正确的轨道上。

关于c# - 在包装 PInvoke 东西的属性的 get 函数中放置大量代码是不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1223991/

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