Metoda abstrakcyjna, która działa jak metoda wirtualna

0

Załóżmy, że mam kilka klas o następującej strukturze:

public abstract class MainClass {
     public abstract void SomeAction();
}
class Class1 : MainClass {
    ...
    public override void SomeAction() {
        ...
    }
    public Class1() {
        ...
    }
}
class Class2 : Class1 {
    ...
    public override void SomeAction() {
        ...
    }
    public Class2() {
        ...
    }
}

Chciałbym dodać do tych klas własność, że kod:

Class1[] my_table = new Class1[1];
my_table[0] = new Class1();
my_table[1] = new Class2();
foreach (Class1 obj_tbl in my_table) {
    System.Console.WriteLine(obj_tbl.GetType());
    obj_tbl.SomeAction();
}

wywołuje następujący efekt:

(1) Wypisuje: "Class1".
(2) Uruchamia metodę SomeAction zdefiniowaną w klasie Class1.
(3) Wypisuje: "Class2".
(4) Uruchamia metodę SomeAction zdefiniowaną w klasie Class1 (!).

Jest jeszcze jeden dodatkowy warunek: funkcja SomeAction zdefiniowana w klasie MainClass musi pozostać metodą abstrakcyjną!!!

(Gdyby funkcja SomeAction zdefiniowana w klasie MainClass mogła być wirtualna, a nie abstrakcyjna, to rozwiązanie byłoby proste - wystarczyłoby zamienić każdą własność override na new. Niestety metoda SomeAction zdefiniowana w klasie MainClass musi pozostać abstrakcyjna!)

Czy istnieje jakiś sposób, żeby napisać kod, który będzie działał zgodnie z wszystkimi wytycznymi, czy też może są one sprzeczne?

Z góry dzięki za pomoc. :) :) :)

0

A nie możesz zmienić override na new tylko w Class2?

0

To proste rozwiązanie faktycznie pomogło. Dzięki! ;]

1 użytkowników online, w tym zalogowanych: 0, gości: 1