Зависит от сценария использования. A
не имеет Method4, поэтому ни один метод, который принимает A
в качестве его параметра, не может полагаться на существование Method4.
Если вам нужен только Method4 как помощник, внутренний для вашего класса, реализуйте его как расширение. В противном случае создайте класс B
, производный от A
, чтобы внешние классы, которым требуется Method4
, могли надежно запросить B
в качестве своего параметра вместо A
.
Конечно, исключения всегда применяются. LINQ является примером того, где использование подклассов было бы нецелесообразным.
В комментарии вы упомянули о необходимости собственности. В этом случае создание class B : A
является вашей основной опцией, поскольку отсутствуют свойства расширения. Другой вариант - создание class B { public A TheA {get; set;} }
, который оборачивается вокруг A.
Но, как уже было сказано, это зависит от случая и использования в реальном мире. Если вам абсолютно необходимо работать с A
и вам нужно вызывать методы для этого A
, тогда методы расширения - ваш выбор, и у вас не может быть свойств. Вместо этого создайте методы Get / Set и сохраните значение свойства в другом месте.