You are on page 1of 8

Міністерство освіти та науки України

Харківський національний університет радіоелектроніки

Кафедра ЕОМ

Лабораторна робота №2
з дисципліни «Спеціальні розділи програмування на .NET»
на тему:
"ДОСЛІДЖЕННЯ МЕХАНІЗМІВ ВІДДЗЕРКАЛЕННЯ ТА ЗАСОБІВ
ДИНАМІЧНОГО ГЕНЕРУВАННЯ КОДУ"

Виконав: Прийняв:
ст.гр. СПм-19-2 Федорченко В. М.
Слісаренко М.В.

Харків 2020
Мета роботи:

1. Придбання практичних навичок з використання рефлексії, пізнього


зв'язування і атрибутів у програмах мовою С#.
2. Придбання практичних навичок з використання динамічних типів, збірок та
хостінгу DLR ScriptRuntime.
3. Удосконалювання навичок роботи в середовищі MS Visual Studio.

1.2 Хід роботи

1. Створити збірку (* .dll), що містить типи (тип) описує задану предметну область:
Employee.cs
using System;
namespace CNnet_Lab1.Models
{
//Общая информация о сотруднике
public class Employee
{
public int Id { get; private set; }
public string FullName { get; private set; }
public string Address { get; private set; }
public string Telephone { get; private set; }
public string OtherInfo { get; private set; }

public Employee(int id, string address, string fullname, string telephone, string otherInfo=null)
{
Id = id;
Address = address;
if (string.IsNullOrEmpty(fullname))
{
throw new Exception("Employee should have a Name");
}
FullName = fullname;
if (string.IsNullOrEmpty(telephone))
{
throw new Exception("Employee should have a Telephone");
}
Telephone = telephone;
OtherInfo = otherInfo ?? string.Empty;
}
public override string ToString()
{
return $"Id: {Id}, FullName: {FullName}, Address: {Address}, Telephone: {Telephone}, OtherInfo:
{OtherInfo}";
}
}
}
Organization.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CNnet_Lab1.Models
{
//Оганизация
public class Organization
{
private List<Employee> _employees = new List<Employee>();
public int OrganizationId { get; private set; }
public string OrganizationName { get; private set; }
public IEnumerable<Employee> Employees { get => _employees; }

public Organization(int organizationID, string organizationName, IEnumerable<Employee> employees=null)


{
OrganizationId = organizationID;
if(string.IsNullOrEmpty(organizationName))
{
throw new Exception("Company should have a Name");
}
OrganizationName = organizationName;
_employees = (employees == null)
? new List<Employee>()
: employees.ToList();
}

public void AddEmployee(int id,string address,string fullName, string telephone, string otherInfo=null)
{
var existingEmployee = _employees.SingleOrDefault(x => x.Id == id);
if(existingEmployee != null)
{
throw new Exception("Employee with such Id already exists");
}
var employee = new Employee(id, address, fullName, telephone, otherInfo);

_employees.Add(employee);
}
}
}
Program.cs

using System;
using CNnet_Lab1.Models;

namespace OrganizationChecker
{
public class Program
{
static void Main(string[] args)
{
var organization = new Organization(1,"Sevaastol");

organization.AddEmployee(1,"street1","Jonny Cash", "+34966899997");


organization.AddEmployee(2, "street2", "Maily Cert", "+3496545797");

foreach(var employee in organization.Employees)


{
Console.WriteLine(employee.ToString());
}

Console.ReadLine();
}
}
}
Реалізувати клас призначеного для користувача атрибуту. Застосувати для
користувача атрибут до типу з збірки * .dll
2. Створити збірку (* .exe), що реалізує роботу з бібліотекою, збірку бібліотеки
завантажити динамічно відповідно до варіанта:
1 - метод Load;
2 - метод LoadFrom.

3. Використовуючи механізм рефлексії дослідити збірку *. dll відповідно до варіанта:


1 – методи;
2 – конструктори;
3 – поля;
4 – властивості;
5 – атрибути.
4. Використовуючи механізм пізнього зв'язування викликати метод (и) примірника
бібліотечного типу (* використовувати метод InvokeMember)

5. Викликати метод (и) примірника бібліотечного типу використовуючи ключове


слово dynamic і середу DLR

6. Використовуючи ключове слово dynamic і середу DLR реалізувати динамічний


об'єкт, відповідний предметної області (див. П. 1) використовуючи:
варіант 1 – клас ExpandoObject;
варіант 2 – клас DynamicObject.

7. Використовуючи середу DLR реалізувати збереження стану об'єкта, відповідний


предметної області (див. П. 1) використовуючи:
варіант 1 – Word;
варіант 2 – Excel;
варіант 3 – засоби файлового введення-виведення IronPython.

1.3 Висновки:
В ході даної роботи були виконані завдання відповідно до поставленої мети.
Результати виконання завдання представлені у звіті.

You might also like