Каково различие между RuntimeTypeHandle и Типом?

Используя метод параметризованного типа с областью действия:

public <T> T get(Class<T> key) {
  // ...
  return (T) foo;
}

Здесь я предполагаю, что foo не имеет тип T.
Если он уже набран как T, вы, конечно, можете вернуть его без приведения.

Вы могли бы вызвать это:

IRouter router = container.get(IRouter.class);
16
задан Rytmis 2 September 2008 в 19:28
поделиться

2 ответа

Осторожность: Этот ответ, кажется, устарел. Это было отправлено, прежде чем.NET 4 стала доступной, который, по-видимому, представил некоторую оптимизацию относительно Type и таким образом представил информацию в этом устаревшем ответе. См. этот более свежий ответ для деталей.

Согласно это сообщение в блоге (с 2006) Vance Morrison , RuntimeTypeHandle является типом (struct) значения, который переносит неуправляемый указатель, таким образом Type.GetTypeHandle(obj).Equals(anotherHandle) быстрее для использования для строгого, "точно тот же тип" сравнения, чем obj.GetType().Equals(anotherType) — последний создает System.Type экземпляры, которые, по-видимому, более тяжелы.

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

10
ответ дан 30 November 2019 в 22:44
поделиться

В .NET 4.0 Beta 1 RuntimeTypeHandle просто обертывает RuntimeType . Похоже, что все преимущества его использования в качестве дешевого прокси Type исчезли.

Доказательства вышеуказанного утверждения:

6
ответ дан 30 November 2019 в 22:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: