Полиморфизм, вызывающий правильную функцию - PullRequest
1 голос
/ 10 августа 2011

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

Пожалуйста, дайте мне знать, какая другая информация требуется от меня, чтобы получить правильный ответ, так как я не уверен, достаточно ли это или слишком расплывчато. Дайте мне знать, что конкретно я должен предоставить, так как я новичок в c #.

1 Ответ

2 голосов
/ 10 августа 2011

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

Первый пример кода содержит два класса, второй вызывает методы объектов этих классов для демонстрации полиморфизма.

public class BaseClass
{
    // This method can be "replaced" by classes which inherit this class
    public virtual void OverrideableMethod()
    {
        System.Console.WriteLine("BaseClass.OverrideableMethod()");
    }

    // This method is called when the type is of your variable is "BaseClass"
    public void Method()
    {
        Console.WriteLine("BaseClass.Method()");
    }
}

public class SpecializedClass : BaseClass
{

    // your specialized code
    // the original method from BaseClasse is not accessible anymore
    public override void OverrideableMethod()
    {
        Console.WriteLine("SpecializedClass.OverrideableMethod()");

        // call the base method if you need to
        // base.OverrideableMethod();
    }

    // this method hides the Base Classes code, but it still is accessible
    // - without the "new" keyword the compiler generates a warning
    // - try to avoid method hiding
    // - it is called when the type is of your variable is "SpecializedClass"
    public new void Method()
    {
        Console.WriteLine("SpecializedClass.Method()");
    }
}

проверить классы примерно так:

Console.WriteLine("testing base class");

BaseClass baseClass = new BaseClass();
baseClass.Method();
baseClass.OverrideableMethod();


Console.WriteLine("\n\ntesting specialized class");

SpecializedClass specializedClass = new SpecializedClass();
specializedClass.Method();
specializedClass.OverrideableMethod();


Console.WriteLine("\n\nuse specialized class as base class");

BaseClass containsSpecializedClass = specializedClass;
containsSpecializedClass.Method();
containsSpecializedClass.OverrideableMethod();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...