ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 06.12.2023
Просмотров: 28
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
| | ||||||
| Министерство науки и высшего образования Российской Федерации | ||||||
| Федеральное государственное бюджетное образовательное учреждение высшего образования «МИРЭА – Российский технологический университет» РТУ МИРЭА | ||||||
Институт | ИКБ | | |||||
| | | |||||
Специальность (направление): | 09.03.02 Информационные системы и технологии | | |||||
| | | |||||
Кафедра: | КБ-9«Предметно-ориентированные информационные системы» | | |||||
| | | |||||
Дисциплина: | «Технологии программирования» | |
Практическая работа
на тему:
Виртуальные методы и свойства |
|
Студент: | | | 30.03.2023 | | Сагдиева В.Б | |||||
| подпись | | дата | | инициалы и фамилия |
Группа: | БСБО-10-22 | | Шифр: | 22Б0743 |
Преподаватель: | | | 30.03.2023 | | к.т.н., доц. ИльиченковаЗ.В. |
| подпись | | дата | | инициалы и фамилия |
Москва 2023 г.
Задания
Классы
Продолжить работу с ранее созданными классами
1. Переопределить одно из свойств базового класса в классе-наследнике.
2. Изучить теоретический материал по теме «Библиотека классов» (https://metanit.com/sharp/tutorial/3.46.php). Создать библиотеку классов по теме своей курсовой работы, содержащую хотя бы один класс.
3. Изучить теоретический материал по теме «Библиотека классов» (https://metanit.com/sharp/tutorial/3.46.php). Создать библиотеку классов по теме своей курсовой работы. Перенести в библиотеку классов все необходимые классы для выполнения курсовой работы.
Основные понятия, связанные с темой
Переопределение свойств
Также как и методы, можно переопределять свойства:
class Person
{
int age = 1;
public virtual int Age
{
get => age;
set{ if(value > 0 && value < 110) age = value; }
}
public string Name { get; set; }
public Person(string name)
{
Name = name;
}
public virtual void Print() => Console.WriteLine(Name);
}
class Employee : Person
{
public override int Age
{
get => base.Age;
set { if (value > 17 && value < 110) base.Age = value; }
}
public string Company { get; set; }
public Employee(string name, string company)
: base(name)
{
Company = company;
base.Age = 18; // возраст для работников по умолчанию
}
}
В данном случае в классе Person определено виртуальное свойство Age, которое устанавливает значение, если оно больше 0 и меньше 110. В классе Employee это свойство переопределено - возраст работника должен быть не меньше 18.
Person bob = new Person("Bob");
Console.WriteLine(bob.Age); // 1
Employee tom = new Employee("Tom", "Microsoft");
Console.WriteLine(tom.Age); // 18
tom.Age = 22;
Console.WriteLine(tom.Age); // 22
tom.Age = 12;
Console.WriteLine(tom.Age); // 22.
Создание библиотеки классов в
Visual Studio
Нередко различные классы и структуры оформляются в виде отдельных библиотек, которые компилируются в файлы dll и затем могут подключаться в другие проекты. Благодаря этому мы можем определить один и тот же функционал в виде библиотеки классов и подключать в различные проекты или передавать на использование другим разработчикам.
Создадим и подключим библиотеку классов.
Возьмем имеющийся проект консольного приложения C#, например, созданный в прошлых темах. В структуре проекта нажмем правой кнопкой на название решения и далее в появившемся контекстном меню выберем Add -> New Project... (Добавить новый проект):
Далее в списке шаблонов проекта найдем пункт Class Library:
Затем дадим новому проекту какое-нибудь название, например, MyLib:
После создания этого проекта в решение будет добавлен новый проект, в моем случае с названием MyLib:
По умолчанию новый проект имеет один пустой класс Class1 в файле Class1.cs. Мы можем этот файл удалить или переименовать, как нам больше нравится.
Например, переименуем файл Class1.cs в Person.cs, а класс Class1 в Person. Определим в классе Person простейший код:
namespace MyLib
{
public class Person
{
string name;
public Person(string name)
{
this.name = name;
}
public void Print() => Console.WriteLine($"Name: {name}");
}
}
Теперь скомпилируем библиотеку классов. Для этого нажмем правой кнопкой на проект библиотеки классов и в контекстном меню выберем пункт Rebuild:
После компиляции библиотеки классов в папке проекта в каталоге bin/Debug/net6.0 мы сможем найти скомпилированный файл dll (MyLib.dll). Подключим его в основной проект. Для этого в основном проекте нажмем правой кнопкой на узел Dependencies и в контекстном меню выберем пункт
Add Project Reference...:
Далее нам откроется окно для добавления библиотек. В этом окне выберем пункт Solution,который позволяет увидеть все библиотеки классов из проектов текущего решения, поставим отметку рядом с нашей библиотекой и нажмем на кнопку OK:
Если наша библиотека вдруг представляет файл dll, который не связан ни с каким проектом в нашем решении, то с помощью кнопки Browse мы можем найти местоположение файла dll и также его подключить.
После успешного подключения библиотеки в главном проекте изменим файл Program.cs, чтобы он использовал класс Person из библиотеки классов:
using MyLib; // подключение пространства имен из библиотеки классов
Person tom = new("Tom");
tom.Print(); // Name: Tom
Код программы и скриншот ее работы
Библиотека:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ClassLibrary1
{
public class money
{
private int dox;
private int rasx;
public virtual int Dox
{
get
{
return dox;
}
set
{
if (value < 0) dox = 0;
dox = value;
}
}
public int Rasx
{
get
{
return rasx;
}
set
{
if (value < 0) rasx = 0;
rasx = value;
}
}
public money() { Dox = 40000; Rasx = 48250; }
public money(int d) { Dox = d; Rasx = 58100; }
public money(int dox, int rasx)
{
Dox = dox;
Rasx = rasx;
}
public virtual string print()
{
return ($"{dox} сумма дохода, {rasx} сумма расходов");
}
public void print1()
{
Console.WriteLine("Вы залезли в долги, Данной суммы не хватило на месяц: ");
}
public void print2()
{
Console.WriteLine("Оставшаяся сумма после всех трат за месяц: ");
}
public int remains(int dox, int rasx)
{
if (dox < rasx)
{
print1();
return dox;
}
else
{
print2();
return (dox - rasx);
}
}
public double remains(double dox, double rasx)
{
if (dox < rasx)
{
print1();
return dox;
}
else
{
print2();
return (dox - rasx);
}
}
public static money operator +(money a, money b)
{
return new money(a.Dox + b.Dox, a.Rasx + b.Rasx);
}
public static bool operator ==(money a, money b)
{
return (a.Dox == b.Dox && a.Rasx == b.Rasx);
}
public static bool operator !=(money a, money b)
{
return (a.Dox != b.Dox && a.Rasx != b.Rasx);
}
}
public class money2 : money
{
public int Reg { get; set; }
public override int Dox
{
get
{
return base.Dox;
}
set
{
if (value < 0) base.Dox = 0;
base.Dox = value;
}
}
public money2(int dox, int rasx, int r) : base(dox, rasx)
{
Reg = r;
}
}
public class dostatoc : money
{
public int Pem { get; set; }
public dostatoc(int dox, int rasx, int p) : base(dox, rasx)
{
Pem = p;
}
public override string print()
{
string result = base.print() + $"{Pem} премия в этом месяце";
return result;
}
}
public abstract class Property
{
private string Name { get; set; }
public void Prorerty(string name)
{
Name = name;
}
public abstract void Move();
}
public class Apartment : Property
{
public Apartment(string name) : base() { }
public override void Move()
{
Console.WriteLine("Квартира находится в собственности, необходимо оплачивать каждый месяц только комунальные услуги");
}
}
}
Подключение библиотеки:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ClassLibrary1;
namespace ConsoleApp1
{
public class programm
{
static void Main(string[] args)
{
money a = new money();
money a1 = new money(60000);
money a2 = new money(40000, 37590);
a.print();
Console.WriteLine($"{a.remains(40000, 48250)}");
a1.print();
Console.WriteLine($"{a1.remains(60000, 58100)}");
a2.print();
Console.WriteLine($"{a2.remains(40000.50, 37590.60)}");
money2 b = new money2(60000, 50000, 1500);
b.print();
dostatoc c = new dostatoc(40000, 38950, 2000);
c.print();
Property apartment = new Apartment("квартира");
apartment.Move();
Console.ReadKey();
}
}
}
Вывод
В ходе практической работы я изучила, что такое переопределение свойств, как создать библиотеку классов в Visual Studio, а также научилась применять все на практике.