You have an indexer (i.e. this[int index]) in both the base class and the derivied class. You need to mark the indexer virtual in the base class and overrides in the derived class if you want to preserve polymorphism or you must mark the indexer as new in the derived class to break polymorphism.