Поведение метода базового класса при сокрытии / перегрузке вспомогательных методов в унаследованном классе - PullRequest
2 голосов
/ 23 декабря 2011
public class Foo
{
    public string Test()
    {
        return GetName();
    }

    public string GetName()
    {
        return "Foo";
    }
}

public class Bar : Foo
{
    public new string GetName()
    {
        return "Bar";
    }
}


new Foo().Test(); // Foo

new Bar().Test(); // also Foo

Я пытался создать «обертку» для Foo, чтобы можно было модульно протестировать поведение Test(), когда GetName() выдает неожиданные значения.Я не могу напрямую влиять на поведение GetName() в Foo, поскольку оно зависит от событий конвейера ASP.NET.вернуть «Бар», но, очевидно, я неправильно понял модель наследования.

Есть ли способ достичь того, что мне нужно?

1 Ответ

3 голосов
/ 23 декабря 2011

GetName должен быть виртуальным в вашем Foo и переопределенным в вашем классе Bar. Как это:

public class Foo 
{
     public string Test()     
     {         
         return GetName();
     }

     public virtual string GetName()
     {
         return "Foo";
     }
}

public class Bar : Foo 
{
     public override string GetName()
     {
         return "Bar";
     }
} 

Изменить: но теперь я вижу из вашего нового комментария, что изменение Foo может быть не вариант для вас.

...