Вопрос

Гиды создаются с использованием new Ключевое слово, которое заставляет меня думать, что это тип ссылки.

Это правильно?

Guid uid = new Guid();

Хранятся ли гииды на куче?

Это было полезно?

Решение

Вы можете увидеть определение гида самостоятельно:

public struct Guid ...

Или вы можете проверить это так:

bool guidIsValueType = typeof(Guid).IsValueType;

GUID создаются с использованием нового ключевого слова, которое заставляет меня думать, что это тип ссылки.

Структы тоже могут иметь конструкторы, например, new DateTime(2012, 12, 23).

Другие советы

GUID - это тип значения.

Видеть MSDN. Анкет Обратите внимание, что GUID - это структура. Анкет Все структуры есть Типы значений.

GUID создаются с использованием нового ключевого слова, которое заставляет меня думать, что это тип ссылки.

Перестань думать об этом. Типы значений тоже могут иметь конструкторы. Это совершенно законно, хотя и странно сказать

int x = new int();

Это то же самое, что присвоение нуля на x.

Это правильно?

Неа.

Хранятся ли Гиви в куче?

Да. Гиды также хранятся в стеке.

Обратите внимание, что приведенный ниже анализ предполагает, что реализация CLI - это Microsoft "Desktop" или "Silverlight" CLR, работающая в Windows. Я понятия не имею, что делают другие версии CLI, что они делают на Mac, и так далее. Если вам нужно знать, хранится ли определенный кусок памяти в стеке в других реализациях, вам придется спросить кого -то, кто является экспертом в этих реализациях.

Гид хранится в стеке при следующих обстоятельствах:

(1) Когда GUID является «временным» результатом продолжающегося расчета или используется в качестве аргумента для метода. Например, если у вас есть метод Call M (New Guid ()), то временное хранилище для нового GUID выделяется в стеке.

(2) Когда GUID является локальной переменной, которая (а) не в блоке итератора, (б) не внешняя внешняя переменная анонимного метода или выражения лямбды.

Во всех других ситуациях GUID не хранится в стеке. Гид хранится в куче, когда он является полем референтного типа, элементом массива, закрытым локалом анонимного метода или выражения лямбды или локальным в блоке итератора.

GUID также не может храниться ни в куче GC, ни в стеке. GUID может храниться в совершенно неуправляемой памяти, доступной через небезопасную арифметику.

Мне любопытно, почему вы так заботитесь о том, находятся ли кусочки GUID на стеке или на куче. Что это меняет?

Это на самом деле Гидо. Анкет Все типы построены с использованием new ключевое слово. Вы можете определить типы ссылок из типов значений, будь то учебный класс, интерфейс, или же делегат (все ссылки типа), или структура или же перевозить (Типы значений).

Тип значения, см. Пример ниже:

using System;                   
public class Program
{
    public static void Main()
    {
        Guid a1 = new Guid();
        Console.WriteLine(a1);
        Guid b1 = a1;
        Console.WriteLine(b1);
        a1 = Guid.NewGuid();
        Console.WriteLine(a1);
        Console.WriteLine(b1);
    }
}

/* OUTPUT
00000000-0000-0000-0000-000000000000
00000000-0000-0000-0000-000000000000
164f599e-d42d-4d97-b390-387e8a80a328
00000000-0000-0000-0000-000000000000
*/
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top