Как вызвать метод?
От: IvanM Россия  
Дата: 08.12.03 17:50
Оценка:
Есть такая иерархия классов на C#

public class Control
{
    protected virtual void SomeMethod()
    {
        //Делает то, что нужно
    }
}

public class SomeStandatdControl : Control
{
    protected override void SomeMethod()
    {
        //Делает не то, что нужно
    }
}

public class MyControl : SomeStandatdControl
{
    protected override void SomeMethod()
    {
        //Как тут вызвать Control.SomeMethod???
    }
}
Re: Как вызвать метод?
От: Walker США  
Дата: 08.12.03 18:25
Оценка: -1
Здравствуйте, IvanM, Вы писали:

IM>public class MyControl : SomeStandatdControl

IM>{
IM> protected override void SomeMethod()
IM> {
IM> //Как тут вызвать Control.SomeMethod???
IM> }
IM>}
IM>[/c#]

(this as Control).SomeMethod();
Re[2]: Как вызвать метод?
От: IvanM Россия  
Дата: 08.12.03 19:10
Оценка:
Здравствуйте, Walker, Вы писали:

W>
W>(this as Control).SomeMethod();
W>


Да все бы хорошо, да только он говорит

MyControl.cs(40): Cannot access protected member 'System.Windows.Forms.Control.SomeMethod(...)' via a qualifier of type 'Control'; the qualifier must be of type 'MyControl' (or derived from it)


Для обхода этого безобразия придумали чудо слово base, но оно работает только на один уровень иерархии вверх. А вот на на два и более?
Re[3]: Как вызвать метод?
От: Аноним  
Дата: 08.12.03 19:28
Оценка:
Здравствуйте, IvanM, Вы писали:

IM>Для обхода этого безобразия придумали чудо слово base, но оно работает только на один уровень иерархии вверх. А вот на на два и более?


удали using System.Windows.Forms или переименуй свой класс Control (опоздал, уже занято ) на что нить еще
Re[4]: Как вызвать метод?
От: IvanM Россия  
Дата: 08.12.03 19:37
Оценка:
Здравствуйте, Аноним, Вы писали:


А>удали using System.Windows.Forms или переименуй свой класс Control (опоздал, уже занято ) на что нить еще


Дык, блин, а это и не мой Control! Это и есть самый натуральный System.Windows.Forms.Control. Если бы все эти контролы были мои, мы бы с ними как-нибудь между собой договорились
Re[4]: Как вызвать метод?
От: IvanM Россия  
Дата: 08.12.03 19:47
Оценка:
Здравствуйте, Аноним, Вы писали:

А>удали using System.Windows.Forms или переименуй свой класс Control (опоздал, уже занято ) на что нить еще


Да и еще, как ни переименовывай, нифига не помогает. Тут проблема в другом, но не может вызывать protected метод (а он ведь protected). Аналог на С++ работает на ура. Вопрос как такое делается на шарпе?

class Control
{
protected:
    virtual void SomeMethod()
    {
        //Делает то, что нужно
    }
};

class SomeStandatdControl : public Control
{
protected:
    virtual void SomeMethod()
    {
        //Делает не то, что нужно
    }
};

class MyControl : public SomeStandatdControl
{
protected:
    virtual void SomeMethod()
    {
        //Как тут вызвать Control.SomeMethod???
        Control::SomeMethod();
    }
};
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.