C # Наследование, доступ к дочерним элементам с базовыми функциями? - PullRequest
0 голосов
/ 29 августа 2009

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

Чтобы проиллюстрировать мою проблему, я создал упрощенный пример. Я ожидал, что этот пример выведет «5», но это не так :) Решение кажется заключается в том, что мне нужно скопировать функцию getInt () из myclass1 в myclass2 ... тогда это будет работать, но это, кажется, лишает смысла наследование от myclass1 (я хотел избежать дублирования функции в каждом классе).

class Program
{
    static void Main(string[] args)
    {
        myclass2 myclass = new myclass2();

        // Expected to output 5, but it actually outputs 0
        Console.WriteLine( myclass.getInt() );
    }
}

struct s1
{
    public string str;
    public int num;
}

struct s2
{
    public int num;
    public int num2;
}

class myclass1
{
    internal s1 mystruct;

    internal int getInt()
    {
        return mystruct.num;
    }
}

class myclass2 : myclass1
{
    internal new s2 mystruct;

    internal myclass2()
    {
        mystruct.num = 5;
    }
}

1 Ответ

5 голосов
/ 29 августа 2009

Вы прячетесь myclass1.mystruct с myclass2.mystruct. Это два совершенно разных объекта.

Вы можете переопределить объект, сделав его virtual в базовом классе и override в подклассе, но объект должен сохранить свой тип. Вы не можете изменить тип экземпляра, потому что это небезопасно. (FIXME) Если вы хотите изменить тип mystruct, почему?

Если вы просто хотите получить доступ к myclass1.mystruct из myclass2, вы можете использовать base.mystruct, я думаю.

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