Читаем C# 4.0 полное руководство - 2011 полностью

Как видите, методOvlDemo перегружается четыре раза. Первый его вариант не получает параметров, второй получает один целочисленный параметр, третий — два целочисленных параметра, а четвертый — два параметра типаdouble.Обратите также внимание на то, что два первых варианта методаOvlDemo возвращают значение типаvoid,а по существу, не возвращают никакого значения, а два других — возвращают конкретное значение. И это совершенно допустимо, но, как пояснялось выше, тип возвращаемого значения не играет никакой роли для перегрузки метода. Следовательно, попытка использовать два разных (по типу возвращаемого значения) варианта методаOvlDemo в приведенном ниже фрагменте кода приведет к ошибке.

// Одно объявление метода OvlDemo(int) вполне допустимо, public void OvlDemo(int a) {

Console.WriteLine("Один параметр: " + a);

}

/* Ошибка! Два объявления метода OvlDemo(int) не допускаются, хотя они и возвращают разнотипные значения. */ public int OvlDemo(int a) {

Console.WriteLine("Один параметр: " + a); return a * a;

}

Как следует из комментариев к приведенному выше коду, отличий в типах значений, возвращаемых обоими вариантами методаOvlDemo , оказывается недостаточно для перегрузки данного метода.

И как пояснялось в главе 3, в C# предусмотрен ряд неявных (т.е. автоматических) преобразований типов. Эти преобразования распространяются также на параметры перегружаемых методов. В качестве примера рассмотрим следующую программу.

// Неявные преобразования типов могут повлиять на // решение перегружать метод.

using System;

class Overload2 {

public void MyMeth(int x) {

Console.WriteLine("В методе MyMeth(int): " + x);

}

public void MyMeth(double x) {

Console.WriteLine("В методе MyMeth(double): " + x);

class TypeConv {

static void Main {

0verload2 ob = new 0verload2;

int i = 10; double d = 10.1;

byte b = 99; short s = 10; float f = 11.5F;

ob.MyMeth(i);    //    вызвать    метод    ob.MyMeth(int)

ob.MyMeth(d);    //    вызвать    метод    ob.MyMeth(double)

ob.MyMeth(b);    //    вызвать    метод    ob.MyMeth(int)    —    с    преобразованием    типа

ob.MyMeth(s);    //    вызвать    метод    ob.MyMeth(int)    —    с    преобразованием    типа

ob.MyMeth(f); // вызвать метод ob.MyMeth(double) — с преобразованием типа

}

}

При выполнении этой программы получается следующий результат.

В методе MyMeth(int): 10 В методе MyMeth(double): 10.1 В методе MyMeth(int): 99 В методе MyMeth(int): 10 В методе MyMeth(double): 11.5

Перейти на страницу:

Похожие книги

Access 2002: Самоучитель
Access 2002: Самоучитель

В книге рассматривается широкий круг вопросов, связанных с использованием программной среды Access 2002, которая является составной частью пакета Office 2002 и предназначена для создания банка данных в самых различных предметных областях.Подробно описывается методика проектирования объектов базы данных (таблицы, формы, отчеты, страницы доступа к данным, запросы, модули).Детально обсуждаются вопросы создания интегрированной базы данных в единой среде Access 2002: формирование БД с нуля, конвертирование в программную среду баз данных, созданных в ином программном окружении – Clarion, FoxPro.Особое внимание уделяется формированию разнообразных запросов к интегрированной базе данных Access 2002 с использованием языков программирования SQL, VBA и макросов.Приводятся общие сведения о возможностях языка обмена данными между различными компьютерами и приложениями (XML). Описываются возможности использования гиперссылок, связывающих базу данных с другими программными продуктами. Объясняется, как можно работать с базой данных Access 2002 без установки ее на компьютер, используя технологию ODBC (Open Data Base Connectivity). В приложениях приводятся количественные параметры Access 2002 и связанная с этой СУБД терминология.Предлагаемая книга будет полезна специалистам, занимающимся практической разработкой банков данных и приложений на их основе, а также студентам вузов, изучающим информатику.

Павел Юрьевич Дубнов

Программирование, программы, базы данных / ОС и Сети / Книги по IT