Подтвердить что ты не робот

Есть ли указатель на С#, например С++? Это безопасно?

Я пишу приложение, которое работает с древовидной структурой данных. Я написал его с С++, теперь я хочу написать его с помощью С#. Я использую указатели для реализации структуры данных дерева. Есть ли указатель на С#? Безопасно ли это использовать?

4b9b3361

Ответ 1

Если вы реализуете древовидную структуру в С# (или Java или многие другие языки), вы должны использовать ссылки вместо указателей. NB. ссылки на С++ не совпадают с этими ссылками.

Использование похоже на указатели по большей части, но есть такие преимущества, как сбор мусора.

class TreeNode
{
    private TreeNode parent, firstChild, nextSibling;

    public InsertChild(TreeNode newChild)
    {
        newChild.parent = this;
        newChild.nextSibling = firstChild;
        firstChild = newChild;
    }
}

var root = new TreeNode();
var child1 = new TreeNode();
root.InsertChild(child1);

Достопримечательности:

  • Не нужно изменять тип с помощью * при объявлении членов
  • Не нужно устанавливать их в null в конструкторе (они уже нулевые)
  • Нет специального оператора -> для доступа к члену
  • Не нужно писать деструктор (хотя смотрите IDisposable)

Ответ 2

Да. В С# есть указатели.

НЕТ. Они безопасны НЕ.

Фактически вам нужно использовать ключевое слово unsafe, когда вы используете указатели на С#.

Для примеров посмотрите здесь и MSDN.

static unsafe void Increment(int* i)
{
    *i++;
}

Increment(&count);

Используйте это вместо этого, и код будет SAFE и CLEAN.

static void Increment(ref int i)
{
    i++;
}

Increment(ref count);

Ответ 3

Также есть указатель на С#?

Да, объявленный с использованием синтаксиса int* varName;.

Используется ли это безопасное?

Нет указателей не безопасно.

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

Ответ 5

Существует большая серия структур данных, реализованная в .Net 2 в MSDN.

Структуры данных Часть 1

Они включают пример кода для таких вещей, как Binary Search Tree, Graph, SkipList, NodeList и т.д. Код довольно полный и включает в себя несколько страниц документов о том, почему эти структуры работают и т.д.

Ни один из Microsoft не использует указатели. В общем, вам никогда не нужно использовать их в С#. Бывают случаи, когда их использование будет приятным, или они похожи на то, как вы думаете на С++. Но вы обычно можете найти способ не использовать их.

Самые большие причины, по которым не использовать небезопасный код для указателей, это то, что вы теряете соответствие со стандартным доверием. Вы не можете запускать механизмы, такие как щелчок один раз, сайты asp.net, а Silverlight также не позволяет их. Stick с refs и полностью управляемыми концепциями, чтобы ваш код мог работать в большем количестве мест.