<?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>.NET</title><link>http://blogs.wankuma.com/yuki/category/1430.aspx</link><description>.NET</description><managingEditor>ゆき</managingEditor><dc:language>ja-JP</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>ゆき</dc:creator><title>VB.NETで関数名に戻り値を設定できるけど</title><link>http://blogs.wankuma.com/yuki/archive/2006/12/10/49769.aspx</link><pubDate>Sun, 10 Dec 2006 21:14:00 GMT</pubDate><guid>http://blogs.wankuma.com/yuki/archive/2006/12/10/49769.aspx</guid><wfw:comment>http://blogs.wankuma.com/yuki/comments/49769.aspx</wfw:comment><comments>http://blogs.wankuma.com/yuki/archive/2006/12/10/49769.aspx#Feedback</comments><slash:comments>749</slash:comments><wfw:commentRss>http://blogs.wankuma.com/yuki/comments/commentRss/49769.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/yuki/services/trackbacks/49769.aspx</trackback:ping><description>&lt;P&gt;VB.NET って関数名に戻り値設定できますよね。&lt;BR&gt;まぁ誰も使っていないと思いますが。&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;けど、C#とかでは書けないから最終的にどうなっているのだろうと少し疑問に思いました。&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;例えばこんなコードは、実際にはどのように変換されているのでしょう？&lt;/P&gt;
&lt;P&gt;■変換前&lt;/P&gt;
&lt;P&gt;①&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;FONT color=#0000ff&gt;Public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;Function&lt;/FONT&gt; TestMethod(&lt;FONT color=#0000ff&gt;ByVal&lt;/FONT&gt; value &lt;FONT color=#0000ff&gt;As&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;Integer&lt;/FONT&gt;) &lt;FONT color=#0000ff&gt;As&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;Boolean&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#008000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'マジックナンバーは使わないように！&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; '0 の意味が他人に伝わりません。&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#0000ff&gt;If &lt;/FONT&gt;value = 0 &lt;FONT color=#0000ff&gt;Then&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TestMethod = &lt;FONT color=#0000ff&gt;True&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#0000ff&gt;Else&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TestMethod = &lt;FONT color=#0000ff&gt;False&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#0000ff&gt;If &lt;/FONT&gt;TestMethod &lt;FONT color=#0000ff&gt;Then&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MessageBox.Show("TRUE")&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#0000ff&gt;Else&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MessageBox.Show("FALSE")&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt; End Function&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;■変換後&lt;/P&gt;
&lt;P&gt;②&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;FONT color=#0000ff&gt;Public Function&lt;/FONT&gt; TestMethod(&lt;FONT color=#0000ff&gt;ByVal&lt;/FONT&gt; value &lt;FONT color=#0000ff&gt;As&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;Integer&lt;/FONT&gt;) &lt;FONT color=#0000ff&gt;As Boolean&lt;BR&gt;&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#0000ff&gt;Dim&lt;/FONT&gt; flag1 As &lt;FONT color=#0000ff&gt;Boolean&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#0000ff&gt;If&lt;/FONT&gt; (value = 0) &lt;FONT color=#0000ff&gt;Then&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; flag1 = &lt;FONT color=#0000ff&gt;True&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#0000ff&gt;Else&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; flag1 = &lt;FONT color=#0000ff&gt;False&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#0000ff&gt;If&lt;/FONT&gt; flag1 &lt;FONT color=#0000ff&gt;Then&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MessageBox.Show("TRUE")&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#0000ff&gt;Return&lt;/FONT&gt; flag1&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#0000ff&gt;End If&lt;BR&gt;&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MessageBox.Show("FALSE")&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#0000ff&gt;Return&lt;/FONT&gt; flag1&lt;BR&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;End Function&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;実際は&lt;FONT color=#0000ff&gt;Boolean&lt;/FONT&gt;型の変数に戻り値を設定しているんですか。&lt;BR&gt;当然と言えば当然ですね。&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;ちなみに、メッセージボックスのIF文を消しちゃうと&lt;/P&gt;
&lt;P&gt;③&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;&amp;nbsp; Public Function&lt;/FONT&gt; TestMethod(&lt;FONT color=#0000ff&gt;ByVal&lt;/FONT&gt; value As &lt;FONT color=#0000ff&gt;Integer&lt;/FONT&gt;) &lt;FONT color=#0000ff&gt;As Boolean&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#008000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'マジックナンバーは使わないように！&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; '0 の意味が他人に伝わりません。&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#0000ff&gt;If &lt;/FONT&gt;value = 0 &lt;FONT color=#0000ff&gt;Then&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TestMethod = &lt;FONT color=#0000ff&gt;True&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#0000ff&gt;Else&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TestMethod = &lt;FONT color=#0000ff&gt;False&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End Function&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;こんな感じのコードになります。&lt;/P&gt;
&lt;P&gt;④&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;&amp;nbsp; Public Function&lt;/FONT&gt; TestMethod(&lt;FONT color=#0000ff&gt;ByVal&lt;/FONT&gt; value As &lt;FONT color=#0000ff&gt;Integer&lt;/FONT&gt;) &lt;FONT color=#0000ff&gt;As Boolean&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#0000ff&gt;If &lt;/FONT&gt;value = 0 &lt;FONT color=#0000ff&gt;Then&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#0000ff&gt;Return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;True&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Return False&lt;/FONT&gt;&lt;BR&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End Function&lt;/FONT&gt;&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/yuki/aggbug/49769.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>ゆき</dc:creator><title>int GetIntValue(int value) と void GetIntValue(ref int value)の違い</title><link>http://blogs.wankuma.com/yuki/archive/2006/10/19/41720.aspx</link><pubDate>Thu, 19 Oct 2006 00:11:00 GMT</pubDate><guid>http://blogs.wankuma.com/yuki/archive/2006/10/19/41720.aspx</guid><wfw:comment>http://blogs.wankuma.com/yuki/comments/41720.aspx</wfw:comment><comments>http://blogs.wankuma.com/yuki/archive/2006/10/19/41720.aspx#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://blogs.wankuma.com/yuki/comments/commentRss/41720.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/yuki/services/trackbacks/41720.aspx</trackback:ping><description>&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#ff0000&gt;2006/10/19 10:00　追記&lt;BR&gt;お恥ずかしながら、&lt;/FONT&gt;&lt;/STRONG&gt;&lt;STRONG&gt;&lt;FONT color=#ff0000&gt;間違っていました。&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;S&gt;ボックス化を知らなかった時は&lt;BR&gt;次のようなメソッドの違いがわかりませんでした。&lt;/P&gt;
&lt;P&gt;１．&lt;BR&gt;&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; GetIntValue(&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; value)&lt;BR&gt;{&lt;BR&gt;?&lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; value + 10;&lt;BR&gt;}&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;２．&lt;BR&gt;&lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; GetIntValue(&lt;FONT color=#0000ff&gt;ref&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; value)&lt;BR&gt;{&lt;BR&gt;?value += 10;&lt;BR&gt;}&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;&lt;BR&gt;void&lt;/FONT&gt; Test()&lt;BR&gt;{&lt;BR&gt;?&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; i=0;&lt;BR&gt;?i = GetIntValue(i);&lt;BR&gt;??? &lt;BR&gt;?&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt; j=0;&lt;BR&gt;?GetIntValue(ref j);&lt;BR&gt;}&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;Call側で 二回変数名を書くのが面倒くさかったので&lt;BR&gt;１．&lt;BR&gt;i = GetIntValue(i);&lt;BR&gt;ではなく&lt;/P&gt;
&lt;P&gt;２．&lt;BR&gt;GetIntValue(&lt;FONT color=#0000ff&gt;ref&lt;/FONT&gt; j);&lt;BR&gt;をよく利用していました。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;けど内部の動作がわかってくると&lt;/P&gt;
&lt;P&gt;２．&lt;BR&gt;GetIntValue(&lt;FONT color=#0000ff&gt;ref&lt;/FONT&gt; j);&lt;BR&gt;は値型を参照型に変換するために、&lt;BR&gt;ボックス化されマネージヒープにオブジェクトが確保される。&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;１．&lt;BR&gt;i = GetIntValue(i);&lt;BR&gt;はマネージヒープにメモリは確保されない。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;ということで&lt;BR&gt;値型を参照渡しする場合は、&lt;BR&gt;GCの対象になってしまうオブジェクトが生成されてしまうので&lt;BR&gt;気をつけて利用した方がよさそうですね。&lt;/P&gt;&lt;/S&gt;&lt;img src ="http://blogs.wankuma.com/yuki/aggbug/41720.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>ゆき</dc:creator><title>VBで利用するIsDateって結構大胆なの!?</title><link>http://blogs.wankuma.com/yuki/archive/2006/10/17/41585.aspx</link><pubDate>Tue, 17 Oct 2006 21:09:00 GMT</pubDate><guid>http://blogs.wankuma.com/yuki/archive/2006/10/17/41585.aspx</guid><wfw:comment>http://blogs.wankuma.com/yuki/comments/41585.aspx</wfw:comment><comments>http://blogs.wankuma.com/yuki/archive/2006/10/17/41585.aspx#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://blogs.wankuma.com/yuki/comments/commentRss/41585.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/yuki/services/trackbacks/41585.aspx</trackback:ping><description>&lt;P&gt;VBで日付型のチェックをするときに&lt;BR&gt;IsDateを利用してますか？&lt;/P&gt;
&lt;P&gt;Microsoft.VisualBasic.Information.IsDate(value as Object)の中身をのぞくと&lt;/P&gt;
&lt;P&gt;1. value Is NothingだとFalseを返す&lt;BR&gt;2. TypeOf? value Is DateTimeだとTrueを返す&lt;BR&gt;3. TypeOf? value Is Stringだと、Stringにキャストして DateTimeにキャストする&lt;BR&gt;4. 例外が発生しなかったら、Trueを返す&lt;BR&gt;&lt;FONT color=#ff0000&gt;&lt;FONT size=4&gt;5. &lt;STRONG&gt;例外が発生したら握りつぶして、Falseを返す&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;う～ん、例外握りつぶしちゃうんだ。&lt;BR&gt;あまり例外って起こしたくないので、これを知ってから利用機会が減りました。&lt;/P&gt;
&lt;P&gt;やっぱり正規表現の方が書式も指定できるしスマートかな。&lt;BR&gt;&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/yuki/aggbug/41585.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>