Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 16.08.2017
Сообщений: 19

В классе создаются типы интерфейса

26.08.2017, 11:35. Показов 1571. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть интерфейс:
C#
1
2
3
4
public interface IItem
    {
        int Capacity { get; set; }
    }
и интерфейс
C#
1
2
3
4
5
   public interface ICharacteristics
    {
        string Name { get; set; }
        int Value { get; set; }
    }
а потом есть класс

C#
1
2
3
4
5
6
7
8
internal class Hero
    {
        public string Name { get; set; }
        public int Health { get; set; }
        public int Strength { get; set; }
        public IInventoryItem Weapon { get; set; }    // в классе создаётся тип интерфейса IInventoryItem
        public List<ICharacteristics> Characteristics { get; set; } // в классе List  с типом интефейса ICharacteristics
     }
Подскажите, пожалуйста, с какой целью создаются эти типы интерфейсов,и как использовать потом данные типы. Где про это подробно прочитать?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.08.2017, 11:35
Ответы с готовыми решениями:

Реализация интерфейса и разные типы возвращаемых значений
Добрый день. Проблема следующего плана: необходимо, чтобы классы, реализующие интерфейс, возвращали разные типы данных. Есть классы...

Вывод свойств в классе из интерфейса
И так чтобы было понятнее объясняю имеется Interface interface IClient { string Name { get; set; } } ...

Добавление интерфейса IComparable в классе
Задание: В абстрактном классе Персона реализовать метод CompareTo так, чтобы можно было базу данных о персонах по дате рождения. ...

2
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
27.08.2017, 03:03
Твой пример как-то не очень удобен для объяснения, так как нужно придумывать что-то, чтобы это действительно было в тему.

Вот на примере класса, который выполняет какую-то работу (Worker) и логирует данные. Например, тебе нужно иметь возможность быстро менять логер в зависимости от настроек, а не переписывать его каждый раз, когда нужен другой или руками не прописывать один из существующих логеров жёстко в класс Worker. Из примера видно, чем хороши интерфейсы.

Почитай про полиморфизм. Или книгу по шарпу, главу про интерфейсы и наследование вообще.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
using System;
using System.Diagnostics;
using System.IO;
using System.Threading;
 
namespace ConsApp_Interfaces
{
    class Program
    {
        #region Entry point
 
        private static Program _program;
 
        private static void Main(string[] args)
        {
            _program = new Program();
            _program.Run(args);
        }
 
        #endregion
 
        private void Run(string[] args)
        {
            var worker = new Worker(GetLogger());
            worker.DoWork();
 
            Console.ReadKey();
        }
 
        private ILogger GetLogger()
        {
            ILogger logger;
            if (true) // Прочитали из настроек, например
            {
                logger = new FileLogger(
                    Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory), "testLog.txt"));
            }
            else
            {
                logger = new ConsoleLogger();
            }
 
            return logger;
        }
    }
 
    public interface ILogger
    {
        void Log(string text);
    }
 
    public class Worker
    {
        private readonly ILogger _logger;
 
        public Worker(ILogger logger)
        {
            _logger = logger;
        }
 
        public void DoWork()
        {
            _logger.Log("Начало работы");
 
            for (int i = 1; i < 101; i++)
            {
                Thread.Sleep(50);
                _logger.Log(string.Format("Прогресс выполнения: {0:D3}", i));
            }
 
            _logger.Log("Конец работы");
        }
    }
 
    public class ConsoleLogger : ILogger
    {
        public void Log(string text)
        {
            Debug.WriteLine(text);
            Console.WriteLine(text);
        }
    }
 
    public class FileLogger : ILogger
    {
        private readonly StreamWriter _writer;
 
        public FileLogger(string patToFile)
        {
            _writer = new StreamWriter(patToFile);
            _writer.AutoFlush = true;
        }
 
        ~FileLogger()
        {
            _writer.Dispose();
        }
 
        public void Log(string text)
        {
            Debug.WriteLine(text);
            _writer.WriteLine(text);
        }
    }
}
0
Каждому свое
 Аватар для Bretbas
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
27.08.2017, 10:21
Цитата Сообщение от Angry_Eugene Посмотреть сообщение
C#
1
2
public IInventoryItem Weapon { get; set; } * *// в классе создаётся тип интерфейса IInventoryItem
public List<ICharacteristics> Characteristics { get; set; } // в классе List *с типом интефейса ICharacteristics
Пока не дошел до интерфейсов, но помоему ты в классе никакого интерфейса здесь не создаешь.
public IInventoryItem Weapon { get; set; } - объявляешь свойство, которое имеет тип IInventoryItem( интерфейса вроде как )
public List<ICharacteristics> Characteristics { get; set; } - объявляешь также свойство, которое имеет тип List<ICharacteristics>, тоесть список интерфейсов.

В этих свойствах можно хранить объекты, тип который наследует от тех интерфейсов, которые имеют свойства.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.08.2017, 10:21
Помогаю со студенческими работами здесь

Свои типы данных в классе
Если есть класс Animal, то как создать в нем переменную Age, которая будет принимать только 3 значения: new, avarage и old? Чтобы потом...

Выполнение метода интерфейса в другом классе
Здравствуйте. У меня тут задача разобрать стародавний код и привести его в порядок. В частности сейчас для каждой функции приложения...

Получить типы переменных используемых в классе
Здравствуйте. Вопрос такой: есть класс Class1, в нем объявлены переменные разных типов с модификаторами доступа private и pablic. ...

Необходима ли реализация методов интерфейса в классе, включающее этот интерфейс?
Необходима ли реализация методов интерфейса в классе, включающее этот интерфейс?

Почему некоторые типы реализуют сразу и обобщенный вариант интерфейса и не обобщенный?
Почему некоторые типы в c# реализуют сразу и обобщенный вариант интерфейса и не обобщенный, например, string реализует и IComparable и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru