Что такое (тип) в (тип) objectname.var
Я перебираю книгу по С# и наткнулся на то, что не могу найти, потому что не знаю, как это называется, или пытаюсь найти что-то по описанию.
Могут ли некоторые объяснить мне, что происходит, или значение, стоящее за (type)
перед ссылкой на объект, как в (int)objectname.variablename
?
Это похоже на кастинг для меня.
РЕДАКТИРОВАТЬ: Так как большинство из вас идет от ссылки "Мой" на кастинг, когда я только догадываюсь, и мне нужно больше кода, я включаю код, который я рассматриваю, который поднял этот вопрос. Я подвергаю сомнению (int) в (int) numericupDown1.Value;
private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
dinnerParty.NumberOfPeople = (int)numericUpDown1.Value;
DisplayDinnerPartyCost();
}
Ответы
Ответ 1
Он преобразует числовое значение numericUpDown1.Value в значение int. Это также можно сделать, используя
Convert.toInt32(numericUpDown1.Value)
Я предполагаю, что dinnerParty.NumberOfPeople является целочисленным значением, и поэтому, если вы его не произвели, он выкинет ошибку, если предоставленное значение не является целым числом. Например, если предоставленное значение было двойным или строковым, оно выкидывало бы ошибку, при этом кастинг превращал бы double, например, от 20,5 до 20, и это было бы принято. Для строки это будет зависеть от того, содержит ли строка в нем число. Если строка была "12", то использование упомянутого выше метода преобразования преобразует его в целое число 12.
Ответ 2
Это кастинг, он пытается использовать varablename в type (type) во время выполнения
Ответ 3
Ты прав. Это кастинг.
Ответ 4
Не зная, какие типы связаны с этим, трудно точно сказать, что происходит.
Кастинг будет явно вызывать оператор преобразования из одного типа в другой:
http://msdn.microsoft.com/en-us/library/ms173105(VS.80).aspx
Однако он может быть разобщенным или явным боксом. Бокс /Unboxing - это дорогостоящий способ хранения типов значений в куче.
http://msdn.microsoft.com/en-us/library/yz2be5wk.aspx
Ответ 5
Как сказал Эрик Липперт (один из разработчиков С#) в комментарии в другом месте, это Конверсия - преобразование из одного типа в другой.
Это не Литье. Кастинг - это остаточная концепция от C, где иногда компилятор не знал, что это за тип. Кастинг был сообщением компилятору, как интерпретировать переменную.