2 вопроса относительно ТИПА объекта. Тип объекта является ссылочным типом? Как мы можем создать объект TYPE, если это абстрактный класс? - PullRequest
0 голосов
/ 06 ноября 2018

Является ли объект Type ссылочным типом?
Допустим, у меня есть этот код:

String s = "AAA";
Type b = s.GetType();

Указывает ли b на объект типа, расположенный в куче?

Как мы можем создать объект TYPE для абстрактного класса?
Опять этот код:

String s = "AAA";
Type b = s.GetType();

Как s.GetType(); может создать объект TYPE, если это абстрактный класс? Вы не можете создать экземпляр абстрактного класса.

Итак, метод Object.GetType () возвращает тип, производный от System.Type, а именно System.RuntimeType - это я понимаю. НО какой объект возвращает typeof (объект)? Это должен быть тип, который также является производным от System.Type, поскольку сам тип класса является абстрактным какое название у этого типа?

Ответы [ 3 ]

0 голосов
/ 06 ноября 2018

Не виртуальный метод Object.GetType() реализуется средой выполнения .NET. Он возвращает информацию о типе объекта, для которого вызывается.

Фактическая реализация возвращенного Type является подробностью реализации, но среда выполнения .NET вернет тип, полученный из System.Type, а именно System.RuntimeType. См. Также В чем разница между System.Type и System.RuntimeType в C #? .

Относительно вашего редактирования:

какой объект возвращает typeof(object)?

typeof(T) компилируется в Type.GetTypeFromHandle(), и тип Type, полученный этим методом, снова является подробностью реализации.

Я просто хочу знать, как можно создать объект типа, если объект типа является абстрактным классом?

Ты не можешь. Библиотека mscorlib содержит public abstract class System.Type, который наследуется public abstract class System.TypeInfo, который в свою очередь наследуется internal class RuntimeType. Внутренне CLR делает что-то вроде этого:

public Type GetType()
{
    var typeInfo = new RuntimeType();
    // set some properties
    return typeInfo();
}

А поскольку RuntimeType наследуется от Type, экземпляр этого типа можно вернуть из этого метода.

0 голосов
/ 06 ноября 2018

Указывает ли b на объект типа, расположенный в куче?

Да, поскольку System.Type является ссылочным типом, он всегда выделяется в куче.

Как мы можем создать объект TYPE для абстрактного класса?

var t = typeof (MyAbstractClass);

0 голосов
/ 06 ноября 2018

Вы можете легко получить информацию об этом в официальной документации. Пожалуйста, обратитесь документы

Тип не указывает на фактические объекты. Он просто получает информацию о типе объекта.

Поскольку вы не можете создать экземпляр абстрактного класса, вы не сможете вызывать GetType для этого класса.

...