Полиморфизм / Тип литья Использование - PullRequest
0 голосов
/ 07 января 2011

Я всегда был немного осторожен с полиморфизмом и до сих пор не думаю, что понимаю концепцию в полной мере.

Я понимаю, что полиморфизм как объекта может принимать различные формы. То есть объект может быть одной формы, а затем другой?

Mammal (base class)
cat (subclass of mammal) 
supercat (subclass of cat)
Cat newCat = new Cat();

Теперь я хочу, чтобы кошка была суперкатом, это "Полиморфизм"?

SuperCat supCat = (SuperCat)newCat;

Разве это не похоже на кастинг? Когда вы хотите использовать кастинг? Действительна ли приведенная выше строка кода? Таким образом, newCat преобразуется в Supercat, дает ли newCat больше выделения памяти? Затем копирует его в supCat?

ПРИМЕЧАНИЕ. - Полиморфизм - это использование интерфейсов?

Ответы [ 5 ]

3 голосов
/ 07 января 2011

Просто комментарий к вашей заметке.

Существует два типа полиморфизма.

полиморфизм времени компиляции:

Здесь ваше полиморфное поведение определяется до компиляции. Это происходит с перегрузкой метода, например

public bool DoSomeThing(int myVal)
{
  // some code here
} 

public bool DoSomeThing(double myVal)
{
  // some code here
} 

Время полиморфизма:

Именно здесь происходит полиморфное поведение во время выполнения. Примером этого может быть метод, который принимает тип, который реализует определенный интерфейс (или общий базовый класс). Этот интерфейс может быть другого типа в зависимости от исполняемого кода.

, например

public interface IWeapon
{
   void Strike();
}

public class Knife : IWeapon
{
   public void Strike()
   {
     Console.WriteLine("Stab");
   }
}

public class Gun : IWeapon
{
   public void Strike()
   {
     Console.WriteLine("Shoot");
   }
}

public class Warrior
{
  public void Attack(IWeapon weapon)
  {
    weapon.Strike();
  }
}

Теперь, если Воину дается Оружие, результатом Атаки будет Стрельба, а для Ножа - Удар.

Я не тестировал этот код, поэтому возможны синтаксические ошибки и т. Д., Но вы должны быть в состоянии понять эту идею

1 голос
/ 07 января 2011

Полиморфизм позволяет одному типу выражать некоторый тип контракта, а другим типам реализовывать этот контракт (будь то наследование классов или нет) различными способами, каждый в соответствии со своими собственными целями.Код, использующий этот контракт, не должен (*) заботиться о том, какая реализация задействована, только о том, что контракт будет соблюдаться.

Взят с этого поста.

Полиморфизм - определение только в двух предложениях

1 голос
/ 07 января 2011

Полиморфизм - это то, где вы взаимодействуете с объектами подтипа через интерфейс базового типа.Например:

List<Cat> cats = new List<Cat>();
cats.Add(new Cat());
cats.Add(new SuperCat());

foreach (Cat cat in cats) 
{
    cat.Meow();  // Works whether cat refers to a Cat or SuperCat.
                 // If SuperCat has its own Meow implementation, that is called.
}
0 голосов
/ 07 января 2011

Полиморфизм означает, что ваш SuperCat - это SuperCat, Cat и Mammal, одновременно.Он может рассматриваться как любой из этих трех.

Поли -> Множество

Морфизм -> Отображение или «тип»

0 голосов
/ 07 января 2011

нет это не "полиморфизм" SuperCat - это кошка, но не все кошки являются SuperCat.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...