J# には、final というキーワードがあります。
この final というキーワードは意味合いを幾つか持っています。
クラスに final を修飾した場合は「継承禁止」になります。(最後のクラス)
C# では sealed キーワード (シール クラス) に、VB.NET では NotInheritable キーワードに当たります。
メソッドに final を修飾した場合は「オーバーライド禁止」になります。(最終定義のメソッド)
C# では sealed キーワードに、VB.NET では NotOverridable キーワードに当たります。
C# と VB.NET は、デフォルトでオーバーライド禁止なのですが J# はオーバーライドを許可しています。
私は .NET では "オーバーライド禁止が基本" と考えていますので、殆どのメソッドに final を修飾しています。
通常の変数に final を修飾すると「定数」になります。(最終変数)
これは、C# や VB.NET での const と同じです。
# 慣れとは恐ろしいもので、Java で最近「const」と書いてしまうクセが... (^ω^;)
メソッドの引数に final を修飾すると「不変な変数」になります。
これは C での const 修飾子と同じ働きで、引数がメソッド内で変更不可であることを保証できます。
検証メソッドなどでは引数を元に検証するため、私は final を修飾するようにしています。
(C だと関数で多用しまくってました)
J#
public static final boolean IsDate(final int iYear, final int iMonth, final int iDay) {
:
// ここで検証するであろう「年月日」が変更されては困る
:
}
引数を元に加工して何かをする場合は、別の変数を定義すべきだと思います。
引数の不変の約束って不要でしょうかね? (^-^;)