Вызов функции перегруженного базового класса внутри статической функции? - PullRequest
2 голосов
/ 19 августа 2011
public class A 
{
    public int F () 
    { 
    // do something
    }
}

public class B : A
{    
    public static B F ()
    {
        B b = new B ();
        // do something more with b
        b.base.F (); // this doesn't work
        b.A.F (); // this doesn't work either
        return b;
    }
}

Каков правильный синтаксис для вызова A.F ()? Обратите внимание, что B.F () является статической функцией.

Изменить по поводу "изменить название комментария":

Пожалуйста, не делайте ошибку, чтобы сделать вывод из приведенного ниже примера. На самом деле функции предназначены для чтения XML, а сигнатура функции ReadXML (XmlNode parent, int id) для всех затронутых классов.

Ответы [ 2 ]

3 голосов
/ 19 августа 2011

следующее будет работать (проверено сейчас, чтобы найти правильный ответ) для вызова метода F класса A.

    public static B F()
    {
        B b = new B();
        // do something more with b
        ((A)b).F(); // this works
        return b;
    }

Возможно, вам стоит подумать об изменении имен. Мне трудно поверить, что описательное имя метода будет одинаковым для чего-то, что возвращает int, и для чего-то, что возвращает класс B. Возможно, последний должен иметь где-то там Create, так как это кажется своего рода фабричным методом?

0 голосов
/ 19 августа 2011

Я думаю, что невозможно использовать любое ключевое слово, которое должно работать с экземпляром / наследованием, например base или this в статических методах. При вызове F() в классе B не существует экземпляра класса B, поэтому вы не можете ссылаться на любые base.

В качестве опции вы можете создать объект класса A в B.F() и вызвать F() класса A, как a.F(), или вам нужно сделать F() в A как static и позвоните A.F() из B.F().

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