Как переопределить метод расширения? [Дубликат]

1

Просто отказ от ответственности Я очень новичок в методах расширения и не знаю, что с ними связано "Дос и Дон", и я подозреваю, что я пытаюсь сделать это не так, если просто предложить потенциальную реструктуризацию к моему коду, который сработает.

Хорошо, поэтому лучший способ объяснить, что я хочу сделать, - это пример кода.

namespace ReferencedLibrary
{
     public class Bar
    {
        public Bar(IFoo foo)
        {
            foo.GetLocation();
        }
    }
    public interface IFoo { }
    public static ExtensionMethods
    {
        public static void GetLocation(this IFoo foo){throw new Exception("ERROR: This should not be called.....");}
    }

}
namespace PrimaryApplication
{
    public class MainController
    {
        Bar bar = new Bar(aClassThatImplementsIFoo);
    }
    public static class OtherExtensionMethods
    {
        public static void GetLocation(this IFoo foo)
        {
            Console.WriteLine("Hello World");
        }
        public static void GetWheelConfiguration(this IFoo foo)
        {
            Console.WriteLine("Hello World");
        }
    }
    //This is an example of the inheritance structure of the data I'm using and is unchangeable no matter what.
    public class Vehicle {}
    public class Car : Vehicle {}
    public class Toyota : Car {}
    public class Holden : Car, IFoo {}

    public class Bike : Vehicle IFoo {}
}

Я пытаюсь использовать код другого пользователя, который хотел бы иметь в отдельном проекте и ссылаться на dll. Я также хотел бы избежать слишком большого изменения этого кода. Если это необходимо, я могу просто привести его в PrimaryApplication, если это необходимо.

Существует несколько решений, таких как использование интерфейса, поскольку он, вероятно, следует использовать, и создать метод getLocation() в каждом из классов, которые реализуют IFoo, однако их около 4-5, и это кажется мне нечистым.

В любом случае, что бы вы предложили как лучшее/чистое/простое в обслуживании решение того, чего я пытаюсь достичь?

благодаря

EDIT: этот вопрос аналогичен: Как переопределить существующий метод расширения. Однако данный ответ мне недостаточен, поскольку я вызываю метод расширения из библиотеки ссылок, а не основное приложение, поэтому я не могу пойти

using PrimaryApplication
{

}

Редактировать: на этот вопрос ответил icemaninid в комментариях и явно не дублируется, учитывая, что ответ не совпадает с ответом на другой поток.

  • 1
    Поскольку они статичны, вы не можете сделать их виртуальными. Однако, посмотрите на принятый ответ здесь для «обходного пути»: stackoverflow.com/questions/1451099/…
  • 0
    @icemanind, как бы вы предложили мне обойти это решение? Метод расширения вызывается в указанной библиотеке, которая не ссылается на основное приложение.
Показать ещё 8 комментариев
Теги:

1 ответ

2

Вы не можете переопределить метод расширения. Это статические методы, разрешенные во время компиляции, а не во время выполнения.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню