C # Проблема с переменной класса, небезопасным / фиксированным назначением указателя - PullRequest
0 голосов
/ 14 апреля 2011

Хорошо, я был в некоторых кругах сейчас, и хотя я мог бы спросить об этом в 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.Так как мне это исправить?

Спасибо!

Ответы [ 2 ]

1 голос
/ 14 апреля 2011

V уже передается по ссылке, поэтому, если вы не имеете в виду что-то конкретное: просто присвойте V. Обратите внимание, что если здесь задействовано несколько потоков, вам может потребоваться volatile, Interlocked или синхронизация, например lock - и это относится к всем доступу к члену (чтение или запись).

0 голосов
/ 14 апреля 2011

Вы можете просто передать переменную класса (которая будет по умолчанию ссылочной) и получить доступ к ее открытым полям / свойствам. Или вы могли бы:

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 в памяти и получить их фактические адреса, чтобы дать функции. Если я не понял?

EDIT: Возможно, в ваших операторах присваивания отсутствует знак «*»? Но опять же, почему вы не можете просто назначить переменные напрямую?

fixed (int *p2 = p1)
{
       // Assign values.
       *p2 = 42;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...