Назначение. Netframework
Скачать 107.32 Kb.
|
Автоматическое преобразование типовКогда данные одного типа присваиваются переменной другого типа, неявное преобразование типов происходит автоматически при следующих условиях:
Если оба эти условия удовлетворяются, то происходит расширяющее преобразование. Например, тип int достаточно крупный, чтобы вмещать в себя все действительные значения типа byte, а кроме того, оба типа, int и byte, являются совместимыми целочисленными типами, и поэтому для них вполне возможно неявное преобразование. Числовые типы, как целочисленные, так и с плавающей точкой, вполне совместимы друг с другом для выполнения расширяющих преобразований. Рассмотрим пример: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { short num1, num2; num1 = 10; num2 = 15; Console.WriteLine("{0} + {1} = {2}",num1,num2,Sum(num1,num2)); Console.ReadLine(); } static int Sum(int x, int y) { return x + y; } } } . Приведение несовместимых типовПриведение — это команда компилятору преобразовать результат вычисления выражения в указанный тип. А для этого требуется явное преобразование типов. Ниже приведена общая форма приведения типов: (целевой_тип) выражение Здесь целевой_тип обозначает тот тип, в который желательно преобразовать указанное выражение. Если приведение типов приводит к сужающему преобразованию, то часть информации может быть потеряна. Давайте рассмотрим пример: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { int i1 = 455, i2 = 84500; decimal dec = 7.98845m; // Приводим два числа типа int // к типу short Console.WriteLine((short)i1); Console.WriteLine((short)i2); // Приводим число типа decimal // к типу int Console.WriteLine((int)dec); Console.ReadLine(); } } } Оператор присваивания обозначается одиночным знаком равенства (=). В C# оператор присваивания действует таким же образом, как и в других языках программирования. Ниже приведена его общая форма: имя_переменной = выражение Здесь имя_переменной должно быть совместимо с типом выражения. У оператора присваивания имеется одна интересная особенность, о которой вам будет полезно знать: он позволяет создавать цепочку операций присваивания. Рассмотрим следующий фрагмент кода: int x, у, z; x = у = z = 10; // присвоить значение 10 переменным x, у и z В приведенном выше фрагменте кода одно и то же значение 10 задается для переменных х, у и z с помощью единственного оператора присваивания. Это значение присваивается сначала переменной z, затем переменной у и, наконец, переменной х. Такой способ присваивания "по цепочке" удобен для задания общего значения целой группе переменных. Составные операторы присваиванияВ C# предусмотрены специальные составные операторы присваивания, упрощающие программирование некоторых операций присваивания. Обратимся сначала к простому примеру: x = x + 1; // Можно переписать следующим образом x += 1; Для многих двоичных операций, т.е. операций, требующих наличия двух операндов, существуют отдельные составные операторы присваивания. Общая форма всех этих операторов имеет следующий вид: имя переменной op = выражение где op — арифметический или логический оператор, применяемый вместе с оператором присваивания. 6 Для ввода/вывода в консольном режиме используют следующие методы класса Console: Write( выводимая строка ), WriteLine( выводимая строка ), ReadLine() – возвращает введенную строку. Важное обстоятельство: метод ReadLine всегда возвращает данные типа string, в случае необходимости преобразования должны быть запрограммированы. Аргументом методов Write, WriteLine тоже должна быть символьная строка. Правда, здесь можно часто обойтись без явных преобразований. Разница между Write и WriteLine заключается в том, что после вывода строки WriteLine осуществляет автоматически переход на следующую строку на экране, Write этого не делает. Для преобразования типов данных можно использовать методы класса System.Convert. Например, ToInt32 выполняет перевод в int; ToDouble выполняет перевод в double; ToString выполняет перевод в string. Какие методы имеются в классе Convert можно узнать очень легко: достаточно набрать это слово, поставить точку и на экране появится весь перечень его методов. Рассмотрим простейший пример: вводим два числа и выполняем простейшие вычисления: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApp { class Program { static void Main(string[] args) { int i; double x, y, z; string s; Console.Write("i=");//подсказка при вводе s = Console.ReadLine();//ввод строки i = Convert.ToInt32(s);//преобразование строки в целое Console.Write("x="); x = Convert.ToDouble(Console.ReadLine());//ввод, совмещенный с преобразованием y = i * x; z = 2 * i - x; Console.WriteLine("y=" + y);//вывод с автоматическим преобразованием Console.WriteLine(Convert.ToString(z));//вывод с явным преобразованием Console.ReadLine(); } } } Если аргумент метода WriteLine содержит символьную строку и число, то выполняется автоматическое преобразование. Достаточно писать даже пустую строку, например, “”+y. На внешний вид выводимых данных можно влиять форматами. Проиллюстрируем это следующим примером на обработку данных типа decimal. using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { double d1, d2, d3; string s; s=Console.ReadLine(); d1=Convert.ToDecimal(s); d2=4.5m; //m или M признак константы decimal d3=d1*d2; Console.WriteLine("Answer is :{0:###.##}", d3); Console.ReadLine(); } } } Формат {0 : ###.##} : запись формата состоит из номера аргумента и собственно формата. Последняя строка Console.ReadLine(); необходима для остановки экрана пользователя после выполнения программы. В противном случае этот экран на мгновенье мелькнет на экране и погаснет. 7 |