A adição de um novo método (ou métodos) à sua API deve ser feita de forma a não causar efeitos colaterais na API existente. Mais importante, alguém que continua a usar a API antiga como se a nova API não existisse, não deve ser afetado por ela. O uso da API antiga também não deve ter efeitos colaterais inesperados na nova API.
Se algum dos métodos existentes na API for substituído pelos novos, não os remova imediatamente. Marque-os como obsoletos e forneça uma explicação sobre o que deve ser usado. Isso avisa os usuários do seu código que versões futuras podem não mais dar suporte a ele, em vez de quebrar o código sem aviso.
Se as APIs novas e antigas forem incompatíveis e não puderem viver juntas sem efeitos colaterais indesejados, separe-as e documente que, se a nova API for adotada, a API antiga deverá ser completamente retirada. Isso é menos desejável, pois sempre haverá alguém que tenta usar os dois e fica frustrado quando não funciona.
Como você perguntou sobre o .NET especificamente, convém ler este artigo sobre descontinuação no .NET, que possui links para o ObsoleteAttribute
(usado no exemplo a seguir):
using System;
public sealed class App {
static void Main() {
// The line below causes the compiler to issue a warning:
// 'App.SomeDeprecatedMethod()' is obsolete: 'Do not call this method.'
SomeDeprecatedMethod();
}
// The method below is marked with the ObsoleteAttribute.
// Any code that attempts to call this method will get a warning.
[Obsolete("Do not call this method.")]
private static void SomeDeprecatedMethod() { }
}