Как получить доступ к свойствам экземпляра производного класса, который передается в качестве параметра в виде базового класса - PullRequest
0 голосов
/ 28 сентября 2011

В C # у меня есть базовый класс и производный класс.

У меня есть функция, которая имеет базовый класс в качестве входного параметра

public void SomeFunction(BaseClass InstanceOfDerivedClass)

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

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

Ответы [ 2 ]

4 голосов
/ 28 сентября 2011

Кастинг определенно должен помочь, поскольку ссылка в куче относится к этому классу. Может быть что-то вроде:

if (InstanceOfDerivedClass is DerivedClass)

И в этом блоке вы можете разыграть его и взаимодействовать с ним.

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

1 голос
/ 28 сентября 2011

Вы могли бы сделать это (плохой путь):

public void SomeFunction(BaseClass instanceOfDerivedClass)
{
    DerivedClass derived = null;

    if(instanceOfDerivedClass is DerivedClass)
    {
        derived = instanceOfDerivedClass as DerivedClass;
        // Do stuff like :
        int prop = derived.DerivedProperty;
    }
}

Или, как подсказал Эрик (хороший способ):

public void SomeFunction(BaseClass instanceOfDerivedClass)
{
    DerivedClass derived = instanceOfDerivedClass as DerivedClass;

    if(derived != null)
    {
        // Do stuff like :
        int prop = derived.DerivedProperty;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...