C#->ООП->Полиморфизм

Компьютеры программирование C# .net ООП

Всем привет! Пожалуйста, напишите легкий и четкий пример полиморфизма на C# (жалетельно коротенький)... Инкапсуляция и наследование от зубов... а тут проблемка ) всем спасибо

Примечание:
Спасибо) но было бы хорошо увидеть результат и понятие interface для меня пока незнакомо) ну все ровно спасиб если никто не даст лучше варианта на шарпе дам вам лучший ответ
Ответы:
Извиняюсь, что я тут с java'ой лезу, но C# и java по синтаксису примерно похожи, так что разницы особой не должно быть (в понимании):
Результат такой:
I am first
I am second
Поясню, раз непонятно :)
Интерфейс - это вроде как чисто абстрактный класс (по определению абстрактный класс - это класс, имеющий хотя бы один абстрактный метод, у интерфейса же все методы являются абстрактными). По сути интерфейс - это способ доступа к методам и параметрам объекта, реализующего этот интерфейс. Например, теже классы ManOne и ManTwo могут иметь свои собственные методы, типа goForward(), stendUp() и т.д. Но через интерфейс Speakable мы можем обратиться только к их методу saySomthing().
Но идея полиморфизма то тут следующая - вызывая метод объекта через интерфейс мы вызываем метод не интерфейса, а того объекта, к которому обращаемся через интерфейс.
В принципе пример можно переделать, вместо интерфейса сделать абстрактный класс:
abstract class Man {
   abstract void saySomthing();
}
и наследовать его классами ManOne и ManTwo. Далее можно работать с объектами так:
  Man m = new ManOne();
  m.saySomthing();
  m = new ManTwo();
  m.saySomthing();
и результат будет аналогичный. При этом делая так
m.saySomthing();
мы вызываем метод не абстрактного класса, а того класса, чьим представителем является объект по указателю m. Сложно только с виду на самом деле (:
namespace app
{
   static class app
   {
       public static void Main()
       {
           Square s = new Square();
           s.setPos(0, 0);
       }
   }
   class Rect
   {
       public void setPos(int x, int y)
       {
           Console.WriteLine("setPos in Rect");
       }
   }
>none7
>       public void setPos(int x, int y)
>       {
>           Console.WriteLine("setPos in Square");
>           Rect r = this;
>           r.setPos(x, y);
>       }
Меня плющит или тут все же рекурсивное зацикливание? :) Ведь r.setPos(x, y); - это не обращение к методу класса Rect, а опять вызов метода класса Square с теми же параметрами.


14 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.