Есть такая иерархия классов на 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???
}
}
Здравствуйте, IvanM, Вы писали:
IM>public class MyControl : SomeStandatdControl
IM>{
IM> protected override void SomeMethod()
IM> {
IM> //Как тут вызвать Control.SomeMethod???
IM> }
IM>}
IM>[/c#]
(this as Control).SomeMethod();
Здравствуйте, 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, но оно работает только на один уровень иерархии вверх. А вот на на два и более?
Здравствуйте, IvanM, Вы писали:
IM>Для обхода этого безобразия придумали чудо слово base, но оно работает только на один уровень иерархии вверх. А вот на на два и более?
удали using System.Windows.Forms или переименуй свой класс Control (опоздал, уже занято

) на что нить еще
Здравствуйте, Аноним, Вы писали:
А>удали using System.Windows.Forms или переименуй свой класс Control (опоздал, уже занято
) на что нить еще
Дык, блин, а это и не мой Control! Это и есть самый натуральный System.Windows.Forms.Control. Если бы все эти контролы были мои, мы бы с ними как-нибудь между собой договорились
Здравствуйте, Аноним, Вы писали:
А>удали 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();
}
};