Я использую стороннюю сборку, которая поставляется в двух разных версиях. Я компилирую один из них и загружаю правильную версию во время выполнения.
Версия, с которой я компилировал, выглядит как (V2.0.0)
Код: Выделить всё
public class A { public int P1 { get; set; } }
public class B : A { public int P2 { get; set; } }
Код: Выделить всё
public class A { public int P1 { get; set; } public int P2 { get; set;} }
public class B : A { }
Код: Выделить всё
public static void Main() {
var b = new B();
b.P2 = 3;
}
Интуитивно я могу это понять. В скомпилированной версии есть ссылка на B::P2, которой не существует, но это также кажется странным, поскольку B::P2 находится в общедоступном API B и то, что он реализован в A::P2, является деталью, которая не должна это (или я надеялся, что это не должно) иметь значение.
Я, конечно, могу решить эту проблему путем «перекомпиляции» правильной версии, но тогда я предполагаю, что проблема будет с V2.0.0 вместо этого.
Есть ли способ избежать наличия двух версий моего приложения?
Если это имеет значение, сторонняя сборка — это .NetFramework, а моя код — DotNet 8.
Изменить: извините, я неправильно определил классы.
V1.0.0 выглядит так< /p>
Код: Выделить всё
public class B { public int P1 { get; set; } public int P2 { get; set;} }
Но это также означает, что компиляция с V1.0.0 и загрузка V2.0.0 должны работать, поскольку
- разрешено добавление базового класса без абстрактных/виртуальных членов.
- разрешено перемещение членов в базовые классы.
Подробнее здесь: https://stackoverflow.com/questions/791 ... public-api
Мобильная версия