C#有关类变量的问题,不安全/固定指针分配

问题描述

| 好的,尽管现在我可能会在SO上问这个问题,但是我已经进入了一些圈子。我有一个类,可以说类A具有一些成员变量和函数我有一部分不安全的代码,我需要将成员变量作为参考传递给该代码,并为该参考变量分配一些值。
Class A
{
   int v1;
   int v2;
....

 public unsafe void Method(ref V)
 {
    // Here I need to have something like a 
    // pointer that will hold the address of V (V will be either v1 or v2)            
    // Assign some values to V till function returns.
     int *p1 = &V
      fixed (int *p2 = p1)
      {
       // Assign values.
       }
 }
}
问题是函数返回后,值不会立即存储在v1或v2中。那么我该如何解决呢? 谢谢!     

解决方法

V
已经是引用传递了,因此除非您有特定的想法:只需将值分配给
V
即可。请注意,如果此处涉及多个线程,则可能需要
volatile
Interlocked
或诸如
lock
之类的同步,并且这适用于对成员的所有访问(读取或写入)。     ,您可以简单地传递类变量(默认情况下将通过引用)并访问其公共字段/属性。或者您可以:
Method(ref myA.v1);

public unsafe void Method(ref int V)
 {
    // Here I need to have something like a 
    // pointer that will hold the address of V (V will be either v1 or v2)            
    // Assign some values to V till function returns.
 }
我无法想象有一个令人信服的理由(使用您提供的详细信息)实际上需要修复内存中的v1和v2并获取它们的实际地址以提供给该函数。除非我误会了? 编辑: 也许您的赋值语句缺少\'* \'?但是,为什么不能直接分配给变量呢?
fixed (int *p2 = p1)
{
       // Assign values.
       *p2 = 42;
}
    

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...