Преобразование Суперкласса в Подкласс - PullRequest
1 голос
/ 30 апреля 2019

У меня есть класс, который выглядит так:

public class MySuperClass
{
  public void PrintValue()
  {
    print("SUPER Class");
  }
}

У меня есть другой класс, который выглядит следующим образом:

public class MySubClass : MySuperClass
{
  public void PrintSubValue()
  {
    print("SUB Class");
  }
}

Тогда у меня есть ситуация, когда у меня есть третий класс, который выглядит следующим образом:

public class MyOtherClass
{
  public MyOtherClass(MySuperClass someSubClass)
  {
    someSubClass.PrintSubValue();
  }
}

Он не скомпилируется ... Как и следовало ожидать.

Теперь, если я поменяю MyOtherClass на следующий:

public class MyOtherClass
{
  public MyOtherClass(MySuperClass someSubClass)
  {
    someSubClass = (MySubClass) someSubClass;
    someSubClass.PrintSubValue();
  }
}

Всё равно не скомпилируется ... Этого я не ожидал.

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

1 Ответ

4 голосов
/ 30 апреля 2019

Почему я не могу разыграть

Вы можете разыграть, но затем вы присваиваете его обратно MySuperClass someSubClass, что неявно приводит его к MySuperClass.

Используйте

var castedSomeSubClass = (MySubClass)someSubClass;

или

MySubClass castedSomeSubClass = (MySubClass)someSubClass;
...