Существуют ли указатели в .NET? - PullRequest
9 голосов
/ 31 августа 2010

Я хочу знать, существуют ли указатели в технологии .NET.Если да, есть ли пример для указателей в C #?

Пожалуйста, направьте меня.

Ответы [ 9 ]

13 голосов
/ 31 августа 2010
5 голосов
/ 31 августа 2010

Да, указатели существуют.

Ссылки на самом деле являются указателями, но они отличаются тем, что сборщик мусора знает о них и изменяет их, когда перемещает объекты.

Указатели могутиспользоваться в небезопасном коде, но затем вы должны убедиться, что сборщик мусора не перемещает объекты, на которые вы указываете.

Пример:

string x = "asdf";
unsafe {
  fixed (char* s = x) {
    char* p = s;
    for (int i = 0; i < 4; i++) {
      Console.WriteLine(*p);
      p++;
    }
  }
}

Обратите внимание, что управляемыйобъект, к которому вы хотите получить доступ через указатель, должен быть защищен от перемещения с помощью команды fixed, и компилятор не позволит вам изменить указатель, который вы получаете, поэтому, если вы хотите изменить указатель, вы должныскопируйте его.

Вам необходимо включить небезопасный код в настройках проекта, чтобы использовать ключевое слово unsafe.

4 голосов
/ 31 августа 2010
2 голосов
/ 31 августа 2010

Да, вы можете использовать указатели, если наберете код unsafe.Подробности см. В этом разделе MSDN: Небезопасный код и указатели (Руководство по программированию в C #)

2 голосов
/ 31 августа 2010

Да, но только ограниченным образом, посмотрите эту статью на MSDN

1 голос
/ 31 августа 2010

Я бы долго и пристально посмотрел на то, что вы намерены делать, и увидел бы, пытаетесь ли вы написать код C ++ на C #.В очень редких случаях код unsafe является предпочтительным решением.C # тезисы на более высоком уровне, чем C ++.Поэтому вы, возможно, захотите придерживаться идиом языка, который вы используете.

1 голос
/ 31 августа 2010

Hai, указатели, которые мы можем использовать в .net, но среда не поддерживает указатели из-за автоматической сборки мусора. Поэтому мы пишем как неуправляемый код. Для использования неуправляемого кода перейдите на ваш project properties->build -> and enable allow unsafe code.

образец:

 class UnsafeCode
{
    //mark main as unsafe
    unsafe public static void Main()
    {
        int count = 99;
        int* pointer;   //create an int pointer. 
        pointer = &count;   //put address of count into pointer

        Console.WriteLine( "Initial value of count is " + *pointer );
        *pointer = 10;  //assign 10 to count via pointer
        Console.WriteLine( "New value of count is " + *pointer);
        Console.ReadLine();
       }
}
1 голос
/ 31 августа 2010

Да, они делают. Вы можете начать с этой ссылки.

1 голос
/ 31 августа 2010

Да, они существуют.Вы можете написать небезопасный код .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...