С# — строго типизированный язык

Подобно С++ и Java, С# является строго типизированным языком, а это означает, что каждая переменная и экземпляр объекта в системе относятся к четко определенному типу. Это позволяет компилятору проверять операции, которые вы пытаетесь выполнить с переменными или экземплярами объектов.

Например, предположим, что имеется метод, вычисляющий среднее значение из двух целых чисел и возвращающий результат. Такой метод С# можно объявить следующим образом:

1
2
3
4
double ComputeAvg ( int paraml, int param2 )
{
return (paraml + param2) / 2.0;
}

Приведенный код говорит компилятору, что этот метод принимает два целых числа и возвращает число с плавающей точкой двойной точности (double). Таким образом, если компилятор попытается скомпилировать код, где этому методу вдруг передается экземпляр типа Apple, он выдаст сообщение об ошибке и прекратит работу.

Предположим, что метод переписан несколько иначе:

1
2
3
4
object ComputeAvg( object paraml, object param2 )
{
return ((int) paraml + (int) param2) / 2.0;
}

Вторая версия ComputeAvg также верна, но в этом случае исключена информация о типе. Каждый объект и значение в С# неявно унаследовано от System.Object. Ключевое слово object в С# является псевдонимом класса System.Object. Поэтому вполне законно объявлять эти параметры с типом object. Хотя вторая версия метода может показаться более гибкой, она допускает разные случайности. Что если некоторый код в приложении попытается передать в ComputeAvg объект типа Apple? Компьютер это пропустит, поскольку Apple наследуется от System.Object, как и любой другой класс.

Однако вы получите неприятный сюрприз во время выполнения, когда приложение сгенерирует исключение, сообщающее, что оно не может преобразовать экземпляр Apple в целое число. Метод потерпит неудачу, и если не предусмотрена обработка исключений, он прервет выполнение приложения. Вряд ли вас устроит, чтобы такое случилось в приложении, когда оно будет запущено где-то на рабочем сервере.

Всегда лучше находить ошибки во время компиляции, чем во время выполнения. В этом и состоит мораль данной истории. Если вы используете первую версию ComputeAvg, то компилятор сообщит о том, что нелепо передавать методу экземпляр Apple.

И это намного лучше, чем узнать об этом от рассерженного заказчика, чей сервер электронной коммерции только что выдал сбой. Компилятор — ваш друг, так что будьте вежливы с ним и предоставляйте как можно больше информации о своих намерениях.

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100