Почему фреймворки .NET не могут использовать new, чтобы скрыть невиртуальные методы для незапечатанных классов?

Например:

public class ThirdPartyClass
{
    public void DoSomething() { ... }
}

// Mock framework generated class
public class MockThirdPartyClass : ThirdPartyClass
{
    public new void DoSomething() { // Mock user's deletegate goes here }
}

Я подозреваю, что проблема в том, что тестируемый класс использует базовый класс для своих переменных/параметров, и, следовательно, вызовы метода издевательского класса переходят к базовой версии, а не к теневой версии:

public class MyClass
{
    private ThirdPartyClass tpc;

    public MyClass() { }

    public MyClass(ThirdPartyClass tpc)
    {            
        this.tpc = tpc;
    }

    public void MyClassDoesSomething()
    {
        this.tpc.DoSomething(); // Bypasses MockThirdPartyClass shadow method
    }

Это правильно?


person KJS714    schedule 01.09.2011    source источник


Ответы (1)


Да, это правильно.

Тестируемый класс никогда не будет ссылаться на класс прокси — он всегда будет ссылаться на базовый класс прокси (т. е. реальный класс).

person cbp    schedule 01.09.2011