Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Вот к какому результату приводит выполнение приведенного выше кода.




Без параметров Один параметр: 2 Два параметра: "4 6

Результат вызова метода ob.OvlDemo(4, 6): 10 Два параметра типа double: 1.1 2.32

Результат вызова метода ob.OvlDemo(1.1, 2.32): 3.42

Как видите, метод 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

В данном примере определены только два варианта метода MyMeth (): с параметром типа int и с параметром типа double. Тем не менее методу MyMeth () можно передать значение типа byte, short или float. Так, если этому методу передается значение типа byte или short, то компилятор C# автоматически преобразует это значение в тип int и в итоге вызывается вариант MyMeth (int) данного метода. А если ему передается значение типа float, то оно преобразуется в тип double и в результате вызывается вариант MyMeth (double) данного метода.

Следует, однако, иметь в виду, что неявные преобразования типов выполняются лишь в том случае, если отсутствует точное соответствие типов параметра и аргумента. В качестве примера ниже приведена чуть измененная версия предыдущей программы, в которую добавлен вариант метода MyMeth (), где указывается параметр типа byte.

// Добавить метод MyMeth(byte).

Using System;

class Overload2 {

public void MyMeth(byte x) {

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

}

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(byte) —

// на этот раз без преобразования типа

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

}

}





Поделиться с друзьями:


Дата добавления: 2016-12-03; Мы поможем в написании ваших работ!; просмотров: 459 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Сложнее всего начать действовать, все остальное зависит только от упорства. © Амелия Эрхарт
==> читать все изречения...

2221 - | 2091 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.011 с.