投稿者 魔界の仮面弁士  (社会人) 投稿日時 2008/11/28 07:20:26
> x = CInt(nagasa * Math.Cos(kakudo * 3.14159 / 180))
「3.14159」よりも、「Math.PI」を使った方が良いと思いますよ。


> Disposeが、まだ理解できない。
きちんと理解しようとすると、ちょっと難しい分野ですよね…。


> IroはDisposeする必要ありますか?
いえ。その cosS メソッドの中では、Dispose してはいけません。
cosS に渡すべき Pen を作成した側が、Dispose するようにします。

何故なら、その Pen は cosS メソッドが呼ばれた後も、他のメソッドなどから
利用される可能性があるためです。cosS 内では、その Pen が他で使用されるか
どうかを判断できないので、このメソッド内で Dispose するわけにはいかないのです。


大前提として……こうしたオブジェクトを Dispose する責任を負うのは、
それを「作成」した側であり、「取得」した側では無いという事です。



そしてもう一つ。Dispose について、さらにややこしい話をしなければなりません。


実は今回使っている Pens.Black 等は、Dispose してはいけないオブジェクトなのです。

Pens.Black、Pens.Aqua、Pens.Red などは「共有プロパティ」と呼ばれるものです。
これらの Pen は、.NET 全体で共有されるオブジェクトになっています。

この場合、にぃや♪さんは Pen を「作成」したのではなく、
.NET の内部で作成済みの Pen を「取得」しているだけなので、
VB のコードから、勝手に Dispose してはならないのです。


これが、自分で Pen を「作成」した場合においては、
 Dim p As New Pen(Color.Black, 3)
 cosS(100, hari, p)
 p.Dispose()
などのようにして、『Dispose しなければならない』のですけれどね。