@@ -794,6 +794,54 @@ public void CheckInfo(Weapon76 weapon)
794
794
weapon . ShowInfo ( ) ;
795
795
}
796
796
}
797
+ /**
798
+ * interface IDataProvider для Task77()
799
+ */
800
+ interface IDataProvider
801
+ {
802
+ string GetData ( ) ;
803
+ }
804
+ /**
805
+ * interface IDataProcessor для Task77()
806
+ */
807
+ interface IDataProcessor
808
+ {
809
+ void ProcessData ( IDataProvider dataProvider ) ;
810
+ }
811
+ /**
812
+ * class ConsoleDataProcessor реализует интерфейс IDataProcessor
813
+ */
814
+ class ConsoleDataProcessor : IDataProcessor
815
+ {
816
+ public void ProcessData ( IDataProvider dataProvider )
817
+ {
818
+ Console . WriteLine ( dataProvider . GetData ( ) ) ;
819
+ }
820
+ }
821
+ /**
822
+ * классы DbDataProvider, FileDataProvider и APIDataProvider реализуют интерфейс IDataProvider
823
+ */
824
+ class DbDataProvider : IDataProvider
825
+ {
826
+ public string GetData ( )
827
+ {
828
+ return "Данные из БД" ;
829
+ }
830
+ }
831
+ class FileDataProvider : IDataProvider
832
+ {
833
+ public string GetData ( )
834
+ {
835
+ return "Данные из файла" ;
836
+ }
837
+ }
838
+ class APIDataProvider : IDataProvider
839
+ {
840
+ public string GetData ( )
841
+ {
842
+ return "Данные из API" ;
843
+ }
844
+ }
797
845
/// <summary>
798
846
/// C# УРОКИ | C# ОТ НОВИЧКА К ПРОФЕССИОНАЛУ
799
847
/// By #SimpleCode (https://www.youtube.com/c/SimpleCodeIT/featured)
@@ -3096,9 +3144,34 @@ public static void Task76()
3096
3144
}
3097
3145
}
3098
3146
/**
3147
+ * интерфейсы и полиморфизм
3099
3148
*
3149
+ * Интерфейс это кострукция языка программрования C#
3150
+ * Интерфейсы должны оперделять поведение и контракт, но не должны содержать реализацию
3151
+ * Классы реализуют интерфейс
3152
+ * У интерфейса есть множественное наследование - это важное отличие интерфеса от класса или абстрактного класса
3153
+ * Интерфейсы могут наследоваться между собой (один интерфейс может унаследовать несколько разный интерфесов),
3154
+ * один определенный класс может унаследовать несколько интерфесов
3155
+ * В интерфесе не может быть конструкторов, интерфейс не может содержать поля класса (переменные)
3156
+ * Мы не можем создать экземпляр интерфейса
3157
+ * Каждая отдельная сущность должна находится в отдельном файле (для классов и интерфейсов разные файлы)
3158
+ * У интефесов нет реализации а только "абстрактные" методы (как у астракнтого класса)
3159
+ * Интерфейсы иогут содержать свойства. (Свойства это мотоды которые маскируются под поля)
3160
+ * Задачей интерфеса является определить контракт азвимодействий между классами
3161
+ * С помощью интерфейса мы определяем поведение которое в последствии будет реализовано в каком-то конкретно классе
3162
+ * У интерфесов все поля (методы, свойства) по умолчанию имеют модификатор доступа public
3100
3163
*/
3101
3164
public static void Task77 ( )
3165
+ {
3166
+ IDataProcessor dataProcessor = new ConsoleDataProcessor ( ) ;
3167
+ dataProcessor . ProcessData ( new DbDataProvider ( ) ) ;
3168
+ dataProcessor . ProcessData ( new FileDataProvider ( ) ) ;
3169
+ dataProcessor . ProcessData ( new APIDataProvider ( ) ) ;
3170
+ }
3171
+ /**
3172
+ *
3173
+ */
3174
+ public static void Task78 ( )
3102
3175
{
3103
3176
3104
3177
}
0 commit comments