我知道一個令人困惑的標題。讓我解釋。將一大堆代碼放在包裝PInvoke內容的屬性的get函數中是否是不好的做法?
我必須編組一個結構數組,然後轉換爲一個類的數組(傳統兼容性)。例如
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;
}
}
}
我意識到這會工作,我只是想知道如果這是好的慣用和編碼明智? – DevDevDev 2009-08-03 18:57:56