クラスライブラリのような物ではなく、末端アプリケーションを開発するとき気になる事。internal と sealed。C# の話であり、VB.NET ならば、Friend と NotInheritable。
末端アプリケーションならば外部から参照される事がないので、殆ど全てのクラスが internal になり、多くのクラスは sealed になる。
私はイチイチこれらのキーワードを付けるようにしているのだが、他の多くの開発者はどうしているのだろう。
一緒に仕事している人は付けない傾向が多いような気がする。どっちにしろ外部から使われる用途でないのだから、そんな区別も必要ないということだろうか。確かにそんな気もする。
同じように気になるのが、オーバーライドするネタがあるクラスを継承し、派生クラスが sealed になるケース。例えば、
internal abstract class A
{
public abstract void a();
}
internal sealed class B : A
{
public override void a(){}
}
こんなケース。このとき、B の a() を記述するときに
public sealed override void a(){}
こうすべきかどうか迷う。
同じように internal なクラスに public メンバ?とも迷う。internal なクラスのメンバは最高でも internal にしか制限を弛められないから、public メンバは変に思える。
しかし、私は public にするようにしている。クラスの制限が変更になっとき面倒だからだ。
さらに、抽象クラスのコンストラクタ。public にしようか protected にしようか迷う。どうせインスタンス化できないのだから、public にしても問題ないが、意味的には protected なので protected と書くようにしているが。