読者です 読者をやめる 読者になる 読者になる

C#ではpublic公開したいときはinterfaceでなくclassが推奨されているのはあまり知られてない気がするのと、C# 6か7でInternal implementation onlyが導入されそうな件 (タイトル長すぎ)

.NET C#でライブラリを公開するときはinterfaceを公開したほうがいいという意見を見かける。UnitTestとかでmock/stubのしやすさからinterfaceを使った方が便利なことは確かにある。 でもC#では、interfaceは後からメソッド追加すると、interfaceをimplementsしてた人たちが残念なことになるのだ。
なので、C#でインターフェース至上主義を突き進むと幸せになれないinterfaceで公開してしまうと後悔するかもなのだよ。

マイクロソフトの「クラス ライブラリ開発のデザイン ガイドライン」にはこうある

インターフェイスよりもクラスを定義するようにしてください。 ライブラリのその後のバージョンで、クラスには新しいメンバーを安全に追加できます。インターフェイスにメンバーを追加すると、既存のコードが破損します。
クラスまたはインターフェイスの選択

日本語訳が変な気がするが、言いたいことはおおむねわかる。 あと、public class Fooを公開したいとき、Fooが内部的なUnitTest用にinternal interface IFooをimplementしたくても、interfaceメソッドを実装するにはpublicメソッドにする必要があり、Fooでinternalにしておきたいメソッドまでpublicにしないといけなくなる。残念。

C#の将来版では、Internal implementation onlyというのができるかも。 C# Design Notes for Feb 4, 2015 · Issue #396 · dotnet/roslyn · GitHub