Шаг 91.
Язык программирования C#. Начала
Знакомство с классами и объектами. Примеры использования
На этом шаге мы рассмотрим несколько примеров решения задач с использованием классов и объектов.
Здесь мы рассмотрим несколько программ, в которых используются классы и объекты.
Задание 1. Напишите программу с классом, у которого есть два символьных поля и метод. Он не возвращает результат, и у него нет аргументов. При вызове метод выводит в
консольное окно все символы из кодовой таблицы, которые находятся "между" символами, являющимися значениями полей объекта (из которого вызывается метод). Например, если полям объекта
присвоены значения 'А' и 'D', то при вызове метода в консольное окно должны выводиться все символы от 'А' до 'D' включительно.
Раскрыть/скрыть решение и комментарии.
Прежде всего приведем текст программы.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace pr91_3
{
// Описание класса:
class MyClass
{
// Закрытые поля:
private char symb1; // Символьное поле
private char symb2; // Символьное поле
// Конструктор:
// С двумя символьными аргументами
public MyClass(char s1, char s2)
{
symb1 = s1;
symb2 = s2;
}
// Метод, выводящий символы
public void Show()
{
// Цикл от начального до конечного символа
for (char c = symb1; c <= symb2; c++)
Console.Write("| {0} ", c);
Console.WriteLine("|");
}
}
class Program
{
static void Main()
{
// Создание объекта класса
MyClass A = new MyClass('A', 'K');
// Вызов метода, выводящего символы
A.Show();
// Задержка:
Console.ReadLine();
}
}
}
Архив проекта можно взять
здесь.
Надеемся, что приведенных комментариев будет достаточно для понимания работы программы..
Результат работы приложения изображен на рисунке 1.
Рис.1. Результат работы приложения
Задание 2. Напишите программу с классом, в котором есть два поля: символьное и текстовое. В классе должен быть перегруженный метод для присваивания значений полям.
Если метод вызывается с символьным аргументом, то соответствующее значение присваивается символьному полю. Если метод вызывается с текстовым аргументом, то он определяет значение текстового поля.
Методу аргументом также может передаваться символьный массив. Если массив состоит из одного элемента, то он определяет значение символьного поля. В противном случае (если в массиве больше
одного элемента) из символов массива формируется текстовая строка и присваивается значением текстовому полю.
Раскрыть/скрыть решение и комментарии.
Вот программа, решающая указанную задачу:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace pr91_2
{
// Описание класса:
class MyClass
{
// Закрытые поля:
private char symb; // Символьное
private string txt; // Текстовое
// Конструкторы:
// С одним символым аргументом
public MyClass(char s)
{
symb = s;
}
// С одним строковым аргументом:
public MyClass(string t)
{
txt = t;
}
// С символьным массивом:
public MyClass(char[] c)
{
// Проверка на количество символов в массиве
if (c.Length == 1)
symb = c[0];
else
{
// Формирование строки:
txt = "";
for (int k = 0; k < c.Length; k++)
{
txt += c[k];
}
}
}
// Возврат символьного поля:
public char ret_c()
{
return symb;
}
// Возврат строкового поля:
public string ret_txt()
{
return txt;
}
}
class Program
{
static void Main()
{
char[] Mass1 = { 'a', 'b', 'c' };
char[] Mass2 = { 'd' };
MyClass A = new MyClass('A');
Console.WriteLine("Вызван конструктор с одним символьным
параметром: {0}", A.ret_c());
MyClass B = new MyClass("Строка");
Console.WriteLine("Вызван конструктор с одним строковым
параметром: {0}", B.ret_txt());
MyClass C = new MyClass(Mass1);
Console.WriteLine("Вызван конструктор с массивом из более
одного элемента: {0}", C.ret_txt());
MyClass D = new MyClass(Mass2);
Console.WriteLine("Вызван конструктор с массивом
из одного элемента: {0}", D.ret_c());
// Задержка:
Console.ReadLine();
}
}
}
Архив проекта можно взять
здесь.
Здесь роль требуемого метода играет конструктор, который у нас является перегруженным. Есть три варианта конструктора, на каждый требуемый случай.
Также в класс мы добавили еще два метода, которые возвращают, каждый свой, закрытый член класса.
Результат работы приложения изображен на рисунке 2.
Рис.2. Результат работы приложения
Задание 3. Напишите программу с классом, в котором есть статические методы, которым можно передавать произвольное количество целочисленных аргументов (или целочисленный
массив). Методы, на основании переданных аргументов или массива, позволяют вычислить: наибольшее значение, наименьшее значение, а также среднее значение из набора чисел.
Раскрыть/скрыть решение и комментарии.
Программа, решающая эту задачу, приведена ниже:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace pr91_1
{
// Описание класса:
class MyClass
{
// Метод:
static public void Method1(out int mn, out int mx, out double avg,
params int[] a)
{
// Сумма элементов массива
int sum = 0;
mx = a[0]; // Максимальное значение
mn = a[0]; // Минимальноее значение
for (int k=0; k < a.Length; k++) {
// Прибавление слагаемого к сумме:
sum += a[k];
if (a[k] > mx) mx = a[k];
if (a[k] < mn) mn = a[k];
}
// Вычисление среднего значения
avg = (double)sum / a.Length;
}
}
class Program
{
static void Main()
{
// Исходный массив
int[] A = { 1, 3, 5, 7, 15, 8 };
// Минимальное, максимальное и
// среднее значение
int Mn, Mx;
double Avg;
// Вызов статического метода
MyClass.Method1(out Mn, out Mx, out Avg, A);
Console.WriteLine("Минимальное значение: {0}", Mn);
Console.WriteLine("Максимальное значение: {0}", Mx);
Console.WriteLine("Среднее значение: {0}", Avg);
// Задержка:
Console.ReadLine();
}
}
}
Архив проекта можно взять
здесь.
Отметим, что в этой программе в метод посылается массив с переменным количеством параметров, поэтому в заголовке метода указано служебное слово params. Не забываем, что в этом случае
такой параметр должен располагаться на последнем месте.
Из метода нужно вернуть три значения. Все эти значения перечислены со служебным словом out.
Так как по условию задачи метод должен быть статическим, поэтому для его вызова создавать объект необязательно, что и продемонстрировано в функции Main().
Результат работы приложения изображен на рисунке 3.
Рис.3. Результат работы приложения
Со следующего шага мы начнем рассматривать работу с текстом.
Предыдущий шаг
Содержание
Следующий шаг