Не совсем понятно, что вы пытаетесь сделать, но, насколько я понимаю ваш вопрос, вы хотите изменить поведение M1()
, которое наследуется классом Y
, другим статическим методом M2()
.Это невозможно, если все задействованные методы являются статическими, но вы можете получить желаемый эффект, если объявите M1()
нестатичным.Это может быть сделано следующим образом:
public class X
{
public Boolean M1 (Int32 x1)
{
return M2 (x1);
}
public virtual Boolean M2 (Int32 x2)
{
return M3 (x2);
}
public static Boolean M3 (Int32 x2)
{
return x2 >= 0;
}
}
public class Y : X
{
public override Boolean M2 (Int32 x2)
{
return M3 (x2);
}
public static new Boolean M3 (Int32 x2)
{
return x2 < 0;
}
}
Вот тестовый пример:
Boolean fTest1 = new X ().M1 (1);
Boolean fTest2 = new Y ().M1 (1);
Console.Write ("{0} {1}", fTest1, fTest2);
Это выведет:
True False
Таким образом, метод оболочки M2()
, который вызывает статический метод M3()
в X
, равен virtual
и может быть переопределен в Y
, вызывая другой статический метод M3()
.Следовательно, если вы используете экземпляр производного класса Y
, вызов M2()
внутри унаследованного метода M1()
направлен на метод M2()
, переопределенный внутри Y
, который, в свою очередь, вызывает другойM3()
, с желаемым изменением поведения - в этом примере результатом является обратное логическое значение.