我想知道在 C# 中,如何正确地实现与这段 C++ 代码相同的功能,这段代码中保存了一个指向类对象或结构体的指针(引用)。由于 C# 处理结构体/类对象的方式不同,因此我将在此示例中使用结构体。
struct sMyStruct { .. blah .. };
class MyClass {
sMyStruct *RefToStruct=nullptr;
MyClass(sMyStruct *reftostruct)
{
RefToStruct=reftostruct;
}
};
int main(void)
{
sMyStruct *mystruct = new sMyStruct( .. blah .. );
MyClass *c=new MyClass(mystruct);
delete c;
delete mystruct;
}
实际上,这个结构体是在其他地方创建的(作为框架的一部分,在我的控制范围之外,并且会动态更新),并且每个结构体的行为都不同。MyClass 只需要使用正确的那个(程序员的选择),这就是为什么我希望将对象的引用保留在类本身中,而不必将其传递给为该类创建的每个函数/方法。
很可能:不会。
没有对象;
struct
C# 中的a不是对象,只能通过装箱将其视为对象,这将创建一个孤立的副本,从而违背您的意图。如果类型由您控制,我建议用 C# 术语来说
sMyStruct
应该是。您的用法很夸张,在这里使用就能正常工作。class
class
class
有两种方法可以保存对 a 的引用
struct
,但我怀疑这两种方法都适用于此:ref
内部的字段(托管指针)ref struct
;绝对不适用,因为MyClass
不是struct
sMyStruct*
)使用unsafe
;这假设位置以某种方式固定(GC 引脚、非托管内存或当前线程的堆栈),并且具有显着的限制实际上,我怀疑 没有必要
sMyStruct
成为。它存在于 C++ 中struct
这一事实无关紧要;C# 和 C++ 对于和 的含义完全不同。struct
struct
class
如果您无法控制定义结构的代码,则可以始终将结构包装在类中并共享该类。
现在每个人都通过包装器共享相同的 sMyStruct 副本,并且您可以根据需要复制 StructWrapper 引用。
不需要不安全的代码。