Апкастинг в C#
Можем ли мы считать преобразование типов значений, например, int в float, преобразованием upcasting, а float в int - downcasting? Я полагаю, что когда мы говорим об апскейтинге и спуске, мы конкретно имеем в виду эталонные конверсии.
4 ответа
Нет, преобразования между типами значений не могут рассматриваться как повышающие или понижающие, так как они не разделяют иерархическую связь (они не наследуются ни в какой форме или форме).
Обновление означает, в частности, что вы заменяете ссылку на подтип на ссылку типа супер.
Даункинг это наоборот.
Это не примеры повышения или понижения, как другие описали. Тем не менее, мы можем говорить о расширении и сужении преобразований примитивных типов (например, переход от int к long является расширением преобразования и, следовательно, может выполняться неявно). Однако в данном конкретном случае (float / int) преобразование немного разные.
Существует неявное преобразование из int в float, но преобразование может все еще потерять точность из-за неспособности float точно представлять целые числа. Это стоит знать, поскольку оно нарушает общее правило, согласно которому неявные преобразования никогда не должны терять информацию. Это действительно заметно только в том случае, если вы конвертируете целые числа в числа с плавающей запятой, выполняете кучу математических операций с ними и затем пытаетесь преобразовать обратно в целое число. В этих случаях ошибка аппроксимации может накапливаться, приводя к неверным результатам, если вы предполагаете, что числа с плавающей точкой были точными представлениями десятичных чисел.
Нет, float не является особым случаем (подкласс IE) int. Они разных типов.
Нет, повышение и понижение допустимо только в контексте наследования. Когда вы конвертируете между типами значений, которые могут содержать больше или меньше данных, вы используете простые преобразования типов. Из этого есть два различных типа:
1. Неявные преобразования. Это преобразования, которые могут быть выполнены, поскольку преобразование является "безопасным", то есть данные не будут потеряны. Например, вы можете безопасно конвертировать int
значение для long
значение.
2. Явные преобразования. Это преобразования, которые могут привести к потере данных, и поэтому вы должны выполнить явное приведение, чтобы выполнить преобразование. Например, преобразование long
значение для int
небезопасно
Для получения дополнительной информации см. http://msdn.microsoft.com/en-us/library/ms173105.aspx