static void Main(string[] args) { Developer dev1 = new Developer(); dev1.Greet(); Developer dev2 = new Developer("Nikita", "Kubarko"); dev2.Greet(); Console.WriteLine("--------------"); Software soft1 = new Software(); soft1.Info(); Console.WriteLine(); Software soft2 = new Software("Software 1"); soft2.Info(); Console.WriteLine(); //Console.WriteLine("---- Class Program ----"); //Program program1 = new Program("Paint", "Alex"); //program1.Info(); //Console.WriteLine(); //Program program2 = new Program(); //program2.Info(); //Console.WriteLine(); Console.WriteLine("---- Class Text Processor ----"); TextProcessor Note = new TextProcessor(); Note.Info(); Console.WriteLine(); TextProcessor WordPad = new TextProcessor("WordPad", "Pete", "ProgressiveProgers"); WordPad.Info(); Console.WriteLine(); Console.WriteLine("---- Class Word ----"); Word Word = new Word(); Word.Info(); Console.WriteLine(); Word Word2 = new Word("John"); Word2.Info(); Console.WriteLine(); Console.WriteLine("---- Class Game ----"); Game game1 = new Game(); game1.Info(); Console.WriteLine(); Game game2 = new Game("Dota 2", "Valve", "MMORPG"); game2.Info(); Console.WriteLine(); Console.WriteLine("---- Class Sapper ----"); Sapper sapper1 = new Sapper(); sapper1.Info(); Console.WriteLine(); Sapper sapper2 = new Sapper("Mike Sapperson"); sapper2.Info(); Console.WriteLine(); Console.WriteLine("---- Class Virus ----"); Virus virus1 = new Virus(); virus1.Info(); Console.WriteLine(); Virus virus2 = new Virus("Chameleon", "...", "Data Base"); virus2.Info(); Console.WriteLine(); Console.WriteLine("---- Interfaces Test ----"); WordPad.Copy(); Word2.Copy(); Note.Save(); Word.Save(); virus2.Close(); sapper1.Close(); Console.WriteLine(); Console.WriteLine("---- Same Method's Name in Interface and Abstract Class ----"); Moving TransportableObj = new Transport(); TransportableObj.Move(); ((ITest)TransportableObj).Move(); ITest TransportableObj2 = new Transport(); TransportableObj2.Move(); Console.WriteLine(); Console.WriteLine("---- Overriding Object's Methods Test ----"); Console.WriteLine(WordPad.ToString()); Console.WriteLine(); Console.WriteLine(Word.ToString()); Console.WriteLine(); Console.WriteLine(sapper2.ToString()); Console.WriteLine(); Console.WriteLine(virus2.ToString()); Console.WriteLine(); Console.Write("Объекты game2 и game3 равны? "); Program game3 = new Game("Counter Strike", "Valve", "Shooter"); Console.WriteLine(game2.Equals(game3));//Developer's Name Console.WriteLine(); Sapper TypeSapperObj = new Sapper("George"); TypeSapperObj.GetStatistics(); IFunctions ISapperObj = new Sapper("George"); ISapperObj.GetStatistics(); //Проверяем возможности преобазований классов и интерфейсов этих классов if (ISapperObj is Sapper) { Console.WriteLine("ISapperObj(объект интерфейсного типа) можно преобразовать в тип Sapper"); } else { Console.WriteLine("ISapperObj(объект интерфейсного типа) нельзя преобразовать в тип Sapper"); } if (TypeSapperObj is IFunctions) { Console.WriteLine("TypeSapperObj(объект типа Sapper) можно преобразовать в интерфейсный тип IFunctios"); } else { Console.WriteLine("TypeSapperObj(объект типа Sapper) нельзя преобразовать в интерфейсный тип IFunctios"); } Sapper TypeSapperObj2 = ISapperObj as Sapper; TypeSapperObj2.Info();//Работает метод класса, хотя для интерфейсного типа он не работал (преобразовали из interface в Sapper) IFunctions ISapperObj2 = TypeSapperObj as IFunctions; //ISapperObj2.Info(); --> error Console.WriteLine(); Program Pr1, Pr2; Pr1 = new Word("Mike"); TextProcessor textProcessorObjFromPr1 = Pr1 as TextProcessor; if (textProcessorObjFromPr1 != null) { textProcessorObjFromPr1.Info(); } else { Console.WriteLine("Невозможно преобразовать Word к TextProcessor"); } Pr2 = new Game("PUBG", "Valve", "Battle Royale"); Sapper sapperFromGame = Pr2 as Sapper; if (sapperFromGame != null) { sapperFromGame.Info(); } else { Console.WriteLine("Невозможно преобразовать Game к Sapper"); } Console.WriteLine(); Printer Printer = new Printer(); Object[] objectsMas = new Object[] { WordPad, Word2, game3, sapper2, virus1, Printer }; for (int i = 0; i < objectsMas.Length; i++) { Console.WriteLine(Printer.IAmPrinting(objectsMas[i])); Console.WriteLine(); } }