KaustuvG Ответов: 2

В полиморфизме какой практический смысл использовать ссылочную переменную родительского класса для указания на экземпляр объекта дочернего класса?


Привет, мне было интересно, каков практический смысл использования ссылочной переменной родительского класса для указания на экземпляр объекта дочернего класса в полиморфизме? Может ли кто-нибудь подробно рассказать об этом с некоторыми реальными проблемами, которые решает этот тип инстанцирования?

Govindaraj Rangaraj

Ты спрашиваешь об этом?

Класс А
{}

Класс B: Класс A
{}

Главный()
{
Класс A = новый класс B (); / / почему?

}

2 Ответов

Рейтинг:
18

Pratik Bhuva

Рассмотрим следующий сценарий...

Я хочу разработать новую IDE.
Я буду оказывать поддержку различным базам данных, таким как mySql, oracle и т. д.

Теперь я разработаю один интерфейс

Interface MyInterface
{
  public int Insert();
  public List<object> Select(); 
}


Я передам этот интерфейс поставщикам БД для единообразной реализации.

Поставщики БД не позволили бы мне увидеть их реализацию этих методов.

Таким образом, чтобы получить доступ к этим методам, мне нужно создать ссылку MyInterface, и я назначу ссылку на объект классов поставщика БД.
Таким образом, я могу получить доступ к методам поставщиков БД, не видя их внутренней реализации кода.

DB Поставщик СУБД MySQL...
class MySqlDBProvider : : MyInterface
{
    public override int Insert()
    {
       //here their Insert logic goes
    }
    public override List<Object> Select()
    {
       //here their Select logic goes
    }
}

Oracle DBProvider...
class OracleDBProvider : MyInterface
{
    public override int Insert()
    {
       //here their Insert logic goes
    }
    public override List<Object> Select()
    {
       //here their Select logic goes
    }
}


Теперь мне нужно вот что...
using MyInterfaceNamespace;
using MySqlDBProviderNamespace;
public class MyClass
{
   //here i will create reference of MyInterface
   //and assign Object of Your DB Provider Class.
   MyInterface MyIObj = new MySqlDBProvider();
   MyIObj.Insert();
   MyIObj.Select();

   //I can do the same for Oracle
}


Надеюсь, вы понимаете важность этой функции в таком сценарии.

Надеюсь, Это Поможет
-----------------
Пратик Бхува


Abhinav Gauniyal

5ed :)

Thomas ktg

5ed

Рейтинг:
0

Azee

Проверьте эти примеры:

http://msdn.microsoft.com/en-us/library/ms173152.aspx[^]

http://www.tutorialspoint.com/csharp/csharp_polymorphism.htm[^]

Надеюсь, это поможет.

Ази...