C# как вызвать виртуальный метод
От: Калян  
Дата: 19.09.06 14:26
Оценка:
C# как вызвать виртуальный метод терегруженый потомком из базового класса
Re: C# как вызвать виртуальный метод
От: Lloyd Россия  
Дата: 19.09.06 14:30
Оценка: 1 (1) +2 :))) :))
Здравствуйте, Калян, Вы писали:

К>C# как вызвать виртуальный метод терегруженый потомком из базового класса


Не смог однозначно распарсить твой пост. Напиши код, который не работает так как ты хочешь.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: C# как вызвать виртуальный метод
От: _FRED_ Черногория
Дата: 19.09.06 15:28
Оценка:
Здравствуйте, Калян, Вы писали:

К>C# как вызвать виртуальный метод терегруженый потомком из базового класса


Вызвать из базового класса этот самый метод, то есть "свой собственный". Так как он виртуальный, то вызовется именно "терегруженый потомком".
... << RSDN@Home 1.2.0 alpha rev. 652>>
Now playing: «Тихо в лесу…»
Help will always be given at Hogwarts to those who ask for it.
Re[2]: C# как вызвать виртуальный метод
От: Аноним  
Дата: 19.09.06 15:46
Оценка: -3
Здравствуйте, _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. Дальше при необходимости этой функциональности вызывать этот метод, и из вирутального тоже вызывать его.
Хотя мало понятно зачем это нужно... или зачем этот метод виртуальный, если это нужно.
Re[2]: C# как вызвать виртуальный метод
От: Lloyd Россия  
Дата: 19.09.06 19:58
Оценка:
Здравствуйте, _FRED_, Вы писали:

К>>C# как вызвать виртуальный метод терегруженый потомком из базового класса


_FR>Вызвать из базового класса этот самый метод, то есть "свой собственный". Так как он виртуальный, то вызовется именно "терегруженый потомком".


Это сделать очень просто — стоит лишь убрать ключевое слово virtual. Если тебе не нужно чтобы метод вел себя как виртуальный (а это именно то, что ты описал), то значит и нет необходимости объявлять его виртуальным.
Re[2]: C# как вызвать виртуальный метод
От: Калян  
Дата: 20.09.06 07:42
Оценка:
Здравствуйте, 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. Правда классы попадают в разные сборки, может в этом дело. Но как тогда быть?
Re[3]: C# как вызвать виртуальный метод
От: Smarty Россия  
Дата: 29.08.09 08:37
Оценка:
Здравствуйте, Калян, Вы писали:

К>Выполняем


К>СС сс = new CC();

К>int ii;
К>ii = cc.M();

К>У меня получается ii равно 6. Правда классы попадают в разные сборки, может в этом дело. Но как тогда быть?


Забавно получается. Можете солюшен в зипе выложить что бы и у меня получилось 6?
Re[3]: C# как вызвать виртуальный метод
От: notacat  
Дата: 30.08.09 10:21
Оценка:
К>У меня получается ii равно 6. Правда классы попадают в разные сборки, может в этом дело. Но как тогда быть?
А у меня получается ii равно 2. В любом случае, можно еще перед вызовом M(1) поставить this:
public virtual int M()
{
    return this.M(1);
}

А лучше отладчиком по коду пробегитесь, скорей всего где-то что-то напутано и проблема совсем в другом месте.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.