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. :) :) :)