Предположим, у нас есть четыре класса A, B, T и U, которые выглядят примерно так:
using System;
using bla;
public class T
{
public void method()
{
Console.WriteLine("I am using T.");
}
}
public class U : T
{
public new void method()
{
Console.WriteLine("I am using U.");
// other stuff...
}
}
public class A
{
public T t;
public void method()
{
t = new T();
t.method();
// some important manipulations of t...
}
}
namespace bla{
using T = U;
public class B : A
{
public new void method()
{
// now use type U instead of T in the base method.
base.method();
// other stuff...
}
}
}
public class Test
{
public static void Main()
{
B b = new B();
b.method();
}
}
Я хочу добиться этого, когда базовый метод base.method()
фактически вызывается из класса Bиспользуется тип U, а не тип T. Таким образом, результат метода Main()
будет:
I am using U.
Возможно ли добиться этого в C # без необходимости изменения класса A и /или Т ?Что-то вроде директивы using было бы неплохо.Код выше - очевидно, - не работает так, как я хочуЯ также думал об использовании отражения, но я не уверен, возможно ли использовать отражение в этом случае без необходимости создания экземпляра нового (анонимного) объекта или ссылки на существующий (оба не были бы хороши в моем случае).
В противном случае мне пришлось бы изменить класс A (или, соответственно, класс B как почти 100% построчное копирование), либо заменив каждый T на U, либо вставив в начале директиву using (или приняв параметры,или используя шаблоны, или что-нибудь).В любом случае я бы нашел это не очень аккуратным, и мне интересно, можно ли это как-то улучшить.
Я что-то упускаю из виду?Заранее спасибо за любую помощь!