У меня есть BaseImageView (платформа здесь неактуальна), которая имеет свойство Effect
, которое является объектом command.Почему я не могу пометить этот метод как статический?
Я хотел бы, чтобы все мои команды реализовали IImageEffect
, который имеет метод static
ApplyEffect
, взяв изображение и возвращая изображение с эффектом.
Но компилятор жалуется, что я не могу пометить интерфейсный метод как static
, но это похоже на логическую опцию (поскольку информации о состоянии, необходимой для эффекта) нет.
Я спрашиваю об этом, потому что мне понадобится 100 объектов эффектов, чтобы применить 1 эффект к 100 различным изображениям, в то время как я мог уйти с передачей класса и вызовом статического метода, это устранит 100 экземпляров.
Есть ли способ, которым я могу иметь статический интерфейс или способ, которым я могу передать класс, и вызвать ли он статический ApplyEffect
этого типа?
Нет, элементы интерфейса не могут быть статическими. Как CLR узнает, какую реализацию вы хотели бы назвать, если вы назвали 'IImageEffect.ApplyEffect'? (Есть аргумент для статических членов интерфейса с аргументами общего типа, но это более тонкий.) –
@JonSkeet Я передал бы класс в свойство 'Effect', а затем вызывается' ApplyEffect' в этом классе, поэтому он станет 'EffectClass .ApplyEffect'. Тогда он будет знать, какой конкретный класс я хочу назвать. – vrwim
Извините, это очень трудно понять без конкретного примера * в вопросе *. Если вы просто хотите, чтобы статический метод всегда делал то же самое, просто поместите его в класс вместо интерфейса ... –