C#类变量,不安全/固定指针赋值问题

时间:2011-04-14 17:47:58

标签: c# fixed unsafe

好的,我现在已经进入了一些圈子,虽然我可能会问这个问题。我有一个类让我们说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中。那么我该如何解决这个问题?

谢谢!

2 个答案:

答案 0 :(得分:1)

V已经是引用传递,因此除非您有特定的内容:只需指定V即可。请注意,如果此处涉及多个线程,则可能需要volatileInterlockedlock等同步 - 这适用于对该成员的所有访问权限(已读取)或写)。

答案 1 :(得分:0)

您可以简单地传递类变量(默认情况下将通过引用)并访问其公共字段/属性。或者你可以:

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;
}