
- •Оболочка .Net Framework
- •Свойства качественной программы.
- •Int beta; // Спецификатор private по умолчанию,
- •Наследование.
- •Int beta; // Спецификатор private по умолчанию,
- •Сортировка массива методом прямого выбора
- •Сортировка массива методом прямого обмена (пузырьковым методом)
- •Сохранение текущего состояния объектов в файлах
- •Значение параметра FileMode
- •Паттерны проектирования
- •Порождающие паттерны
- •Структурные паттерны
- •Паттерны поведения
Int beta; // Спецификатор private по умолчанию,
public int gamma; // Явно задан спецификатор public.
/* Методы для получения доступа к членам alpha и beta.
*/
public void setAlpha(int a) {
alpha = а;
}
public int getAlpha() {
return alpha;
}
public void setBeta(int a) {
beta = a;
}
public int getBetaO {
return beta;
}
class AccessDemo {
public static void Main() {
MyClass ob = new MyClass();
/* Доступ к private-членам alpha и beta разрешен
только посредством соответствующих методов. */
ob.setAlpha(-99);
ob.setBeta(19);
Console.WriteLine("Член ob.alpha равен " +
ob.getAlpha());
Console.WriteLine("Член ob.beta равен " +
ob. getBetaO ) ;
// К private-членам alpha или beta нельзя получить
// доступ таким образом:
// ob.alpha = 10; // Неверно! alpha -- закрытый член!
// ob.beta = 9 ; // Неверно! beta -- закрытый член!
// Можно получить прямой доступ
//к члену gamma, поскольку он открытый член.
ob.gamma = 99;}}
Полиморфизм. Полиморфизм – это инструмент, который дает возможность создавать множественные определения для операций и функций. А какое именно определение будет использоваться, зависит от контекста программы.
В С# два или больше методов внутри одного класса могут иметь одинаковое имя, но при условии, что их параметры будут различными. Такую ситуацию называют перегрузкой методов (method overloading), а методы, которые в ней задействованы, — перегруженными (overloaded). Перегрузка методов — один из способов реализации полиморфизма в С#.
В общем случае для создания перегрузки некоторого метода достаточно объявить еще одну его версию. Об остальном позаботится компилятор. Но здесь необходимо отметить одно важное условие: все перегруженные методы должны иметь списки параметров, которые отличаются по типу и/или количеству. Методам для перегрузки недостаточно отличаться лишь типами возвращаемых значений. Они должны отличаться типами или числом параметров. (Другими словами, тип возвращаемого значения не обеспечивает достаточную информацию для С#, чтобы можно решить, какой именно метод должен быть вызван.) Конечно, перегруженные методы могут отличаться и типами возвращаемых значений. При вызове перегруженного метода выполняется та его версия, параметры которой совпадают (по типу и количеству) с заданными аргументами.
Вот простой пример, иллюстрирующий перегрузку методов:
// Демонстрация перегрузки методов.
using System;
class Overload {
public void ovlDemo() {
Console.WriteLine("Без параметров");
}
// Перегружаем метод ovlDemo() для одного
// целочисленного параметра,
public void ovlDemo(int a) {
Console.WriteLine("Один параметр: " + a);
}
// Перегружаем метод ovlDemo() для двух
// целочисленных параметров,
public int ovlDemo(int a, int b) {
Console.WriteLine("Два int-параметра: " + a + " " + b);
return a + b;
// Перегружаем метод ovlDemo() для двух
// double-параметров.
public double ovlDemo(double a, double b) {
Console.WriteLine("Два double-параметра: " +
a + " "+ b ) ;
return a + b;
class OverloadDemo {
public static void Main() {
Overload ob = new OverloadO;
int resl;
double resD;
// Вызываем все версии метода ovlDemo().
ob.ovlDemo();
Console.WriteLine();
ob.ovlDemo(2);
Console.WriteLine();
resl = ob.ovlDemo(4, 6);
Console.WriteLine("Результат вызова ob.ovlDemo(4, 6):
+ resl);
Console.WriteLine();
resD = ob.ovlDemo(1.1, 2.32);
Console.WriteLine(
"Результат вызова ob.ovlDemo(1.1, 2.2):
resD);
Программа генерирует следующие результаты:
Без параметров
Один параметр: 2
Два int-параметра: 4 б
Результат вызова ob.ovlDemo(4, б): 10
Два double-параметра: 1.1 2.32
Результат вызова ob.ovlDemo(I.1, 2.2): 3.42
Как видите, метод ovlDemo () перегружается четыре раза. Первая версия вообще не принимает параметров, вторая принимает один целочисленный параметр, третья — два целочисленных параметра, а четвертая — два double-параметра. Обратите внимание на то, что первые две версии метода ovlDemo () возвращают тип void, т.е. не возвращают никакого значения, а вторые две возвращают значения соответствующих типов. Это вполне допустимо, но, как уже разъяснялось, перегрузка методов не достигается различием только в типе возвращаемого значения. Поэтому попытка использовать следующие две версии метода ovlDemo () приведет к ошибке:
// Одно объявление метода ovlDemo(int) вполне допустимо,
public void ovlDemo(int a) {
Console.WriteLine("Один параметр: " + a ) ;
}