#c# #list #class #subclass
Вопрос:
Я работал над программой типа «краска» и хочу заставить ластик стереть весь элемент, если он попадет. Я использовал интерфейс и подклассы, подобные этому:
public interface IPaint { // some different methods } public abstract class StartAndEndTool : IPaint { public Listlt;IPaintgt; shapes = new Listlt;IPaintgt;(); // the methods again, this time abstract/virtual } public class RectangleTool : StartAndEndTool { // overriding some of the methods // in one of the methods we edit the list, like follows: public override void Complete( ... ) { // some mumbo-jumbo, and: shapes.Add(new RectangleTool()); } } public class EllipseTool : StartAndEndTool { // overriding some of the methods // in one of the methods we edit the list, like follows: public override void Complete( ... ) { // some mumbo-jumbo, and: shapes.Add(new EllipseTool()); } } public class EraserTool: StartAndEndTool { // overriding some of the methods // in one of the methods we USE the list }
Теперь, когда я использую shapes
список в EraserTool
методе, он говорит, что список пуст. Я провел некоторое исследование, но, похоже, методы создают своего рода «отдельные списки». Например, когда я рисую прямоугольник, затем эллипс, затем снова прямоугольник, в нем будет разное количество записей в зависимости от того, в каком классе он используется. Итак, в этом примере: shapes.Count
будет равно 2, если написано в RectangleTool
классе, и будет равно 1, если написано в EllipseTool
классе. Я пробовал использовать ICollections, но он делает то же самое. Как мне это исправить?
Комментарии:
1. Формы теперь являются свойством инструмента, поэтому они доступны только внутри инструмента, и у каждого инструмента есть свой собственный список.
2. Или, ну, доступны из любого места, поскольку они общедоступны, но все равно формы должны быть определены где-то там, где вы определяете свои инструменты, а не как часть инструмента.