投稿者 魔界の仮面弁士  (社会人) 投稿日時 2020/9/4 00:11:16
> この「Overloads」は、省略可だけどオーバーロードであることを明示したい場合に
> つけるのでしょうか、それとも「Overloads」をつけなければならないケースがあるのでしょうか?

答えとしては Yes です。

省略して問題ないケースもあります。(今回は省略可能です)
付与しなければならないケースもあります。
省略できるが付与すべきなケースもあります。


たとえば先の GetPngSize の場合、一方だけに Overloads を付与し、
他方は Overloads を記載しなかった場合、これは
コンパイルエラー BC31409 を誘発します。


エラーにはならないけれども、付与すべきという例も挙げておきましょう。

Public Class Form1
    Inherits System.Windows.Forms.Form

    Public Sub InitLayout(dgv As DataGridView)

    End Sub
End Class


上記の Public メソッドは、
「Sub InitLayout」ではなく、
「Overloads Sub InitLayout」とすべきです。

これは、継承元のクラスに、Protected な
「Overridable Sub InitLayout」が存在するためです。


継承元のクラスのいずれかに同名のメンバーが存在し、
それが MustOverride または Overridable である場合には、
たとえ引数定義が異なっていても、Overloads を付けるべきとされています。
省略は可能なのですが、既定のコンパイラ設定だと警告されます。

また、継承元と継承先とで、名前も引数定義も完全に同じ場合には、
Shadows / Overrides のいずれかを明示します。
省略した場合は Shadows 扱いですが、省略すると警告対象です。