タイトル : Re: [解決] クラスの記述法 投稿日 : 2007/09/07(Fri) 13:26 投稿者 : 魔界の仮面弁士
> FunctionとSub がOverloads できるんだって意外ですね。 IL 的には、戻り値の型が void 型か bool 型かの違いしか無いですしね。 ちなみに .NET そのものは、「引数が同一で戻り値の型のみが異なるオーバーロード」 さえもサポートしています。C# や VB では実装/利用できませんけれどね。 > 警告した方がいいんではないかなぁ>MS > Option Strict On なんだから。 『曖昧な型』の問題ではないので、Option Strict に含めるのは個人的には違和感…。(^^; >>>>> 質問2.継承先でMyBaseとMeの使い分けが分かりません。 少なくとも、 Public Overrides Function Method1() As String Return "[" & MyBase.Method1() & "]" End Function のような処理で、この MyBase を Me や MyClass にできないという事はわかりますよね。 >>> 理解できました。Me は場合によってMyBaseかMyClassのどちらかになる(言い方変だけど)。 "言い方変だけど" という事ですので、表現の曖昧さによるものかも知れませんが、 そのような理解の仕方には、幾許かの誤解を含んでいそうな気がします。 「MyBaseになる場合」と「MyClassになる場合」の具体例を出してみてもらえますか? たまたま、MyBase や MyClass と同じ結果を返す場合もあるというだけであって、 別に、Me が MyBase や MyClass に変化するというわけではありませんよ。 たとえば、下記のサンプルにおいて『 MsgBox(New Poodle().Test()) 』を実行すると、 +-------------------------- | Me:プードルクラス | MyBase:動物クラス | MyClass:犬クラス +-------------------------- という結果となり、それぞれが別の意味を持っていることを確認できます。 '=================== Public Class Animal Public Overrides Function ToString() As String Return "動物クラス" End Function End Class Public Class Dog Inherits Animal Public Overrides Function ToString() As String Return "犬クラス" End Function Public Function Test() As String With New System.Text.StringBuilder() .AppendLine(" Me:" & Me.ToString()) .AppendLine(" MyBase:" & MyBase.ToString()) .AppendLine("MyClass:" & MyClass.ToString()) Return .ToString() End With End Function End Class Public Class Poodle Inherits Dog Public Overrides Function ToString() As String Return "プードルクラス" End Function End Class |