Добрый день!!!
В MSDN и на форумах я не нашел рассказа о данной ситуации, может быть Вы
мне поможете. Спасибо.
class A {}
class B : A {}
class C
{
public virtual void Method(A a);
public virtual void Method(B b);
// Если передается тип A - вызывается правильный метод Method(A a)
// Если передается тип B - вызывается по прежнему метод Method(A a)
// А нужно чтоб вызывался Method(B b)! Как это сделать?
// Явное приведение типов вроде Method((B)obj); не устраивает, так как пронаследованных
// классов - куча
void Work(Type type)
{
A obj = (A)Activator.CreateInstance(type);
Method(obj);
}
}
Здравствуйте, defascat, Вы писали:
D>// Если передается тип A — вызывается правильный метод Method(A a)
D>// Если передается тип B — вызывается по прежнему метод Method(A a)
D>// А нужно чтоб вызывался Method(B b)! Как это сделать?
D>// Явное приведение типов вроде Method((B)obj); не устраивает, так как пронаследованных
D>// классов — куча
D> void Work(Type type)
D> {
D> A obj = (A)Activator.CreateInstance(type);
D> Method(obj);
D> }
D>}
Выбор перегруженного метода осуществляется компилятором при компиляции. С полиморфизмом это не стыкуется.
... << RSDN@Home 1.1.4 beta 2 >>
Здравствуйте, defascat, Вы писали:
D>D>class A {}
D>class B : A {}
D>class C
D>{
D> public virtual void Method(A a);
D> public virtual void Method(B b);
D>// Если передается тип A - вызывается правильный метод Method(A a)
D>// Если передается тип B - вызывается по прежнему метод Method(A a)
D>// А нужно чтоб вызывался Method(B b)! Как это сделать?
D>// Явное приведение типов вроде Method((B)obj); не устраивает, так как пронаследованных
D>// классов - куча
D> void Work(Type type)
D> {
D> A obj = (A)Activator.CreateInstance(type);
D> Method(obj);
D> }
D>}
D>
Хороший вопрос.
<offtopic>
Я подобное на собеседовании люблю спрашивать
class A {}
class B : A {}
void test(A a )
{
if ( a is A )
Console.Writeline("it's A!");
else if ( a is B )
Console.Writeline("it's B!");
}
B b = new B();
A a = new A();
test( a );
test( b );
Что будет выведено?
</offtopic>
По существу:
Я бы сделал интерфейс и дергал бы его у созданного экземпляра.
... << Rsdn@Home 1.1.4 beta 1 >>
Огромное Вам спасибо за помощь.
Придется действительно делать через интерфейс...
Спасибо.