Мне кажется, что вы пытаетесь переопределить Method2, чтобы заставить Method1 напечатать «B». Однако, поскольку Method2 является частным и не виртуальным в классе A, это невозможно , как определено языком C #.
Если мы можем пойти на компромисс, чтобы найти другой подход для достижения желаемых результатов, вот несколько советов.
Состав класса в качестве модифицированной котельной плиты:
class B
{
private A;
public void Method1() {
this.Method2 ();
}
private void Method2() {
WriteLine("B");
}
public void KeptMethod() {
a.KeptMethod();
}
}
Отражение для вызова / изменения приватных членов:
typeof(A).GetField("privateValue", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(a, "injected string");
typeof(A).GetMethod("privateMethod", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(a, new object[0]);
Я знаю, что у обоих есть свои недостатки и ограничения, но, поскольку я не знаю вашей реальной цели, мне трудно быть более конкретным.