Здравствуйте, _FRED_, Вы писали:
_FR>Вызвать из базового класса этот самый метод, то есть "свой собственный". Так как он виртуальный, то вызовется именно "терегруженый потомком".
при помощи обращения к методу напрямую через this должно работать
class a
{
a() { }
virtual void bar() { /* do smth */ }
public void foo()
{
this.bar(); // так вызовется свой метод
bar(); // так вызовется перегрузка
}
}
class b : a
{
b() { }
override bar() { /* do smth else */ }
}
class c
{
/* other stuff*/
// а вот так мы их будем использоватьvoid func()
{
a obj = new b();
b.foo();
}
/* other stuff*/
}
Re[3]: C# как вызвать виртуальный метод
От:
Аноним
Дата:
19.09.06 15:50
Оценка:
Вкралась опечатка. В функции func вместо "b.foo();" следует читать "obj.Foo()".
Re[3]: C# как вызвать виртуальный метод
От:
Аноним
Дата:
19.09.06 15:56
Оценка:
А>Здравствуйте, _FRED_, Вы писали:
Не слушай меня дурака...
Re[4]: C# как вызвать виртуальный метод
От:
Аноним
Дата:
19.09.06 16:00
Оценка:
Здравствуйте, Аноним, Вы писали:
А>>Здравствуйте, _FRED_, Вы писали: А>Не слушай меня дурака...
Это не будет работать, но это можно обойти. Нужно в базовом классе всё тело виртуального метода поместить в другой, приватный метод имя_виртуального_internal. Дальше при необходимости этой функциональности вызывать этот метод, и из вирутального тоже вызывать его.
Хотя мало понятно зачем это нужно... или зачем этот метод виртуальный, если это нужно.
Здравствуйте, _FRED_, Вы писали:
К>>C# как вызвать виртуальный метод терегруженый потомком из базового класса
_FR>Вызвать из базового класса этот самый метод, то есть "свой собственный". Так как он виртуальный, то вызовется именно "терегруженый потомком".
Это сделать очень просто — стоит лишь убрать ключевое слово virtual. Если тебе не нужно чтобы метод вел себя как виртуальный (а это именно то, что ты описал), то значит и нет необходимости объявлять его виртуальным.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, Калян, Вы писали:
К>>C# как вызвать виртуальный метод терегруженый потомком из базового класса
L>Не смог однозначно распарсить твой пост. Напиши код, который не работает так как ты хочешь.
Примерно так:
public class C : ...
{
...
public virtual int M()
{
return M(1);
}
public virtual int M(int I)
{
return I + 5;
}
...
}
public class CC : C
{
...
public override int M(int K)
{
return K + 1;
}
...
}
Выполняем
СС сс = new CC();
int ii;
ii = cc.M();
У меня получается ii равно 6. Правда классы попадают в разные сборки, может в этом дело. Но как тогда быть?
Здравствуйте, Калян, Вы писали:
К>Выполняем
К>СС сс = new CC(); К>int ii; К>ii = cc.M();
К>У меня получается ii равно 6. Правда классы попадают в разные сборки, может в этом дело. Но как тогда быть?
Забавно получается. Можете солюшен в зипе выложить что бы и у меня получилось 6?
К>У меня получается ii равно 6. Правда классы попадают в разные сборки, может в этом дело. Но как тогда быть?
А у меня получается ii равно 2. В любом случае, можно еще перед вызовом M(1) поставить this:
public virtual int M()
{
return this.M(1);
}
А лучше отладчиком по коду пробегитесь, скорей всего где-то что-то напутано и проблема совсем в другом месте.