-
Try, Catch, Finally
Иногда возникает потребность определить программный блок, который должен выполняться по выходу из try/catch блока. Исключение может вызвать ошибку, которая является причиной преждевременного возврата из текущего метода. Удобный путь выхода из этого – блок finally.
Код, содержащийся в блоке finally, выполняется всегда, вне зависимости от возникновения исключения. Чтобы гарантировать возвращение ресурсов, например, убедиться, что файл закрыт, или освободить память от локальных переменных.
Синтаксис инструкции:
class ProgramTryCatchFinally
{
static void Main()
{
try
{
// Блок кода, предназначенный для обработки ошибок
}
catch (<Тип_Исключения1>)
{
// Обработчик для исключения (<Тип_Исключения1>).
}
catch (<Тип_Исключения2>)
{
// Обработчик для исключения (<Тип_Исключения2>).
}
…..
finally
{
// Код завершения обработки исключений.
}
Не зависимо от итога выполнения try/catch блоков, блок finally выполняется обязательно.
Задача. Используя закон Ома рассчитать величину тока. Проект оконное приложение. Сначала создается интерфейс будущего приложения, а затем обработчик события щелчка по кнопке «Вычислить».
0
Режим проектирования Режимы запуска: 1
2 3
Листинг программы
using System;
using System.Collections.Generic; using System.ComponentModel; using System.Data;
using System.Drawing; using System.Linq; using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
try
{
int U = int.Parse(textBox1.Text); // преобразование строкового
int R = int.Parse(textBox2.Text); // отображения в целое
double I = (double)U / R;
label3.Text = I.ToString()+ " A"; // преобразование числа в строку
}
catch
{
label3.Text = "Нельзя вводить буквы и символы";
}
}
}
}
Форматы ввода/вывода
При вводе и выводе информации в языке С# используются функции преобразования:
Функция |
Значение |
Convert.ToDouble(s)
Convert.ToInt16(s) Convert.ToChar(q)
int.Parse( s) double.Parse(s) S.ToString() String.Format(s,x) |
Вещественное число, изображением которого является строка s Целое, изображением которого является строка s Код символа, изображением которого является символ q
Целое, изображением которого является строка s Вещественное, изображением которого является строка s Строка, являющаяся изображением вещественного s Строка, являющаяся изображением вещественного s в форматном выводе числа. |
Например, под Консольное приложение:
x = Convert.ToDouble(Console.ReadLine()); //вещественный тип
d = Convert.ToInt16(Console.ReadLine()); //целый тип
z = Convert.ToInt32(Console.ReadLine()); //целый тип
ch=Convert.ToChar(Console.ReadLine()); //символьный тип
Console.WriteLine("x={0,3:f} y={1,5:f}", x, y); //форматный вывод переменных х и у,
// где 0 и 1 номера вывода, 3 и 5 – количество выводимых символов,
// f – два символа после запятой
Например, под Оконное приложение
int а = int.Parse(textBox1.Text); //преобразование текста, введенного
// в textBox1 в целое число
double b = double.Parse(textBox1.Text); //преобразование текста, введенного
// в textBox1 в вещественное число
label3.Text = S.ToString()+ " руб."; // преобразование числа S в строку
label1.Text =String.Format(“{0:f 3}”,x); // преобразование числа x в строку c форматным выводом символов в компонент label1 через его свойство Text,
где 0 – индекс переменной, f – мантисса, 3 – количество символов после зпт.
label1.Text =String.Format(“{0,5:f 2}”,x); // преобразование числа x в строку c форматным выводом символов в компонент label1 через его свойство Text,
где 0 – индекс переменной, 5 – количество выводимых символов, f – мантисса, 2 – количество символов после зпт.