<?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/mrt/category/1498.aspx</link><description>.NET</description><managingEditor>Mr.T</managingEditor><dc:language>ja-JP</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>Mr.T</dc:creator><title>VisualBasic 2008の新機能 IFが変わった</title><link>http://blogs.wankuma.com/mrt/archive/2008/03/13/127492.aspx</link><pubDate>Thu, 13 Mar 2008 09:51:00 GMT</pubDate><guid>http://blogs.wankuma.com/mrt/archive/2008/03/13/127492.aspx</guid><wfw:comment>http://blogs.wankuma.com/mrt/comments/127492.aspx</wfw:comment><comments>http://blogs.wankuma.com/mrt/archive/2008/03/13/127492.aspx#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://blogs.wankuma.com/mrt/comments/commentRss/127492.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/mrt/services/trackbacks/127492.aspx</trackback:ping><description>&lt;p&gt;Mr.Tです、こんにちは。&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;ネタ元：&lt;a title="http://blogs.msdn.com/vbteam/archive/2008/03/11/if-operator-a-new-and-improved-iif-sophia-salim.aspx" href="http://blogs.msdn.com/vbteam/archive/2008/03/11/if-operator-a-new-and-improved-iif-sophia-salim.aspx"&gt;http://blogs.msdn.com/vbteam/archive/2008/03/11/if-operator-a-new-and-improved-iif-sophia-salim.aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;（注意：以下は翻訳ではないですよ）&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;今までC#、C++などで使えていた3項演算子である（？）は、ショートサーキット評価による演算で、&lt;br&gt;かなり便利だなぁと思われていたものです。&lt;/p&gt; &lt;p&gt;それが、VBでも利用できるようになりました。すばらしい。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;ショートサーキット評価ってのは、簡単にいえば、&lt;/p&gt; &lt;p&gt;True Or (変数A = 変数B)&lt;/p&gt; &lt;p&gt;という式があった場合、変数A=変数Bを評価しなくても、式の結果はTrueになりますから、&lt;/p&gt; &lt;p&gt;わざわざ 変数A=変数Bを内部で評価しませんよ、というものです。&lt;/p&gt; &lt;p&gt;逆にいえば、ショートサーキットであれば、Trueパートだろうが、Flaseパートだろうが、「内部で評価されてしまう」&lt;/p&gt; &lt;p&gt;わけですね。&lt;/p&gt; &lt;p&gt;関数IIFだと、ショートサーキットではありません。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;使い方は、こうです。&lt;/p&gt; &lt;div class="SourceBox"&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;IF（判定式,Trueパート,Falseパート)&lt;/p&gt; &lt;p&gt;もしくは、&lt;/p&gt; &lt;p&gt;IF（Trueパート、Falseパート） &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;いや、すごいね、3項演算子から、判定式まで省略できるように進化してしまったよ！&lt;/p&gt; &lt;p&gt;#っていうか、ぶっちゃけそこまでいらねー&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;3項演算については、もうだいたいわかっている機能なんですが、2項演算になってしまったというか、&lt;/p&gt; &lt;p&gt;&lt;strong&gt;IF（Trueパート、Falseパート）&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;なによ、これ？&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;MSDNで検索。&lt;/p&gt; &lt;p&gt;&lt;a title="http://msdn2.microsoft.com/en-gb/library/bb513985(ja-jp).aspx" href="http://msdn2.microsoft.com/en-gb/library/bb513985(ja-jp).aspx"&gt;http://msdn2.microsoft.com/en-gb/library/bb513985(ja-jp).aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Boolean 引数を省略するときは、1 番目の引数に参照型または null 許容型を指定する必要があります。1 番目の引数が Nothing と評価されると、2 番目の引数の値が返されます。それ以外のすべての場合は、1 番目の引数の値が返されます。次の例は、この評価がどのように動作するのかを示します。&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;つまり、判定する式と値が一体化してしまったような形ですね。判定対象はNothingになります。&lt;/p&gt; &lt;p&gt;注意するのが、1番目の引数が参照型もしくは、Null許容型でなくちゃならないってことでしょうか。&lt;/p&gt; &lt;p&gt;#使い道がわからん &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt; ネタ元のコメントには、？が使いたいならC#を使えば？とか、かいてあったり、これイイヨ！とか、賛否両論&lt;/p&gt; &lt;p&gt;な感じですが、私は素直に喜べる機能じゃないかと思ってます。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/mrt/aggbug/127492.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Mr.T(mrt@wankuma.com)</dc:creator><title>VB.NETでForループで型推論をしたときのワナ</title><link>http://blogs.wankuma.com/mrt/archive/2007/12/27/114984.aspx</link><pubDate>Thu, 27 Dec 2007 18:12:00 GMT</pubDate><guid>http://blogs.wankuma.com/mrt/archive/2007/12/27/114984.aspx</guid><wfw:comment>http://blogs.wankuma.com/mrt/comments/114984.aspx</wfw:comment><comments>http://blogs.wankuma.com/mrt/archive/2007/12/27/114984.aspx#Feedback</comments><slash:comments>18</slash:comments><wfw:commentRss>http://blogs.wankuma.com/mrt/comments/commentRss/114984.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/mrt/services/trackbacks/114984.aspx</trackback:ping><description>&lt;p&gt;Mr.Tです、こんにちは。&lt;/p&gt; &lt;p&gt;巷で、祭りになってる(ｵｲ Forループのときの型推論についてです。&lt;/p&gt; &lt;p&gt;VB.NETだけの話で、C#では、絶対におきないんです。なぜって、Varって書くから。&lt;/p&gt; &lt;p&gt;&lt;font color="blue"&gt;Option Compare Binary&lt;/font&gt;&lt;br&gt;&lt;font color="blue"&gt;Option Strict On&lt;/font&gt;&lt;br&gt;&lt;font color="blue"&gt;Option Explicit On&lt;/font&gt;&lt;br&gt;&lt;font color="blue"&gt;Option Infer On&lt;/font&gt;&lt;br&gt;&lt;font color="blue"&gt;Module&lt;/font&gt; InferSample&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Sub&lt;/font&gt; Main()&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;For&lt;/font&gt; i = &lt;font color="#c00040"&gt;1&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;To&lt;/font&gt;&amp;nbsp;&lt;font color="#c00040"&gt;10&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; Console.WriteLine(&lt;font color="#c00040"&gt;"Mr.Tはコング！"&lt;/font&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Next&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Sub&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Module&lt;/font&gt;&lt;br&gt;&lt;/p&gt; &lt;p&gt;これが型推論が行われているパターン。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font color="blue"&gt;Option Compare Binary&lt;/font&gt;&lt;br&gt;&lt;font color="blue"&gt;Option Strict On&lt;/font&gt;&lt;br&gt;&lt;font color="blue"&gt;Option Explicit Off&lt;/font&gt;&lt;br&gt;&lt;font color="blue"&gt;Option Infer Off&lt;/font&gt;&lt;br&gt;&lt;font color="blue"&gt;Module&lt;/font&gt; InferSample&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Sub&lt;/font&gt; Main()&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;For&lt;/font&gt; i = &lt;font color="#c00040"&gt;1&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;To&lt;/font&gt;&amp;nbsp;&lt;font color="#c00040"&gt;10&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; Console.WriteLine(&lt;font color="#c00040"&gt;"Mr.Tはコング！"&lt;/font&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Next&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Sub&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Module&lt;/font&gt;&lt;br&gt;&lt;/p&gt; &lt;p&gt;これが、型推論がおこなわれていないパターン。&lt;/p&gt; &lt;p&gt;変数iは、上がintegerになります。下は、objectになります。&lt;/p&gt; &lt;p&gt;Main内はおんなじです。&lt;/p&gt; &lt;p&gt;ソース見ただけじゃ、わかりません。&lt;/p&gt; &lt;p&gt;ええ、Explicit Onがページ内に指定されていればいいです。指定されていなければ、そのページ内だけじゃわかりません。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font color="#ff0000" size="6"&gt;&lt;strong&gt;こんなの使えん！&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;そういうわけで、VB.NETでForループじゃ、型推論絶対つかうな派です。&lt;/p&gt; &lt;p&gt;#ごめんなさい、こんな程度しか、まだついていけません。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/mrt/aggbug/114984.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Mr.T(mrt@wankuma.com)</dc:creator><title>カンマ区切りで出力</title><link>http://blogs.wankuma.com/mrt/archive/2007/10/28/104558.aspx</link><pubDate>Sun, 28 Oct 2007 02:24:00 GMT</pubDate><guid>http://blogs.wankuma.com/mrt/archive/2007/10/28/104558.aspx</guid><wfw:comment>http://blogs.wankuma.com/mrt/comments/104558.aspx</wfw:comment><comments>http://blogs.wankuma.com/mrt/archive/2007/10/28/104558.aspx#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://blogs.wankuma.com/mrt/comments/commentRss/104558.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/mrt/services/trackbacks/104558.aspx</trackback:ping><description>&lt;p&gt;Mr.Tです、こんにちは。&lt;/p&gt; &lt;p&gt;&lt;a title="http://blogs.wankuma.com/yaju/archive/2007/10/27/104542.aspx" href="http://blogs.wankuma.com/yaju/archive/2007/10/27/104542.aspx"&gt;http://blogs.wankuma.com/yaju/archive/2007/10/27/104542.aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;いや、カンマ区切りであるなら、VB系で忘れちゃならないもんがあると思ひます。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;例題のように１次元配列になってるんなら、&lt;/p&gt; &lt;p&gt;Dim TargetData() as String = {"1","2","3"}&lt;/p&gt; &lt;p&gt;System.Console.Write(Join(TargetData,","))&lt;/p&gt; &lt;p&gt;この一行で出てきます。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Joinの引数は、String配列、もしくはObject配列なので、Converterで変換かませばいいわけなんで、&lt;/p&gt; &lt;p&gt;それほど面倒にはならないと思います。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/mrt/aggbug/104558.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Mr.T(mrt@wankuma.com)</dc:creator><title>Visual Basic のイベントハンドラの登録でちょっとだけ遊ぶ</title><link>http://blogs.wankuma.com/mrt/archive/2007/10/24/103847.aspx</link><pubDate>Wed, 24 Oct 2007 13:47:00 GMT</pubDate><guid>http://blogs.wankuma.com/mrt/archive/2007/10/24/103847.aspx</guid><wfw:comment>http://blogs.wankuma.com/mrt/comments/103847.aspx</wfw:comment><comments>http://blogs.wankuma.com/mrt/archive/2007/10/24/103847.aspx#Feedback</comments><slash:comments>22</slash:comments><wfw:commentRss>http://blogs.wankuma.com/mrt/comments/commentRss/103847.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/mrt/services/trackbacks/103847.aspx</trackback:ping><description>&lt;p&gt;Mr.Tです、こんにちは。&lt;/p&gt;
&lt;p&gt;&lt;br&gt;ネタ元：Visual Basic でなんとなくイベントとデリゲート　その２。 - イベント ハンドラ -&lt;/p&gt;
&lt;p&gt;&lt;a title="http://blogs.wankuma.com/torikobito/archive/2007/10/24/103755.aspx" href="http://blogs.wankuma.com/torikobito/archive/2007/10/24/103755.aspx"&gt;http://blogs.wankuma.com/torikobito/archive/2007/10/24/103755.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;刈歩 菜良さんのコメント&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;gt; Handles Button1.Click, Button2.Click &lt;br&gt;って、複数イベントをはっつけた時、イベントの発生順序はどうなりますか？&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;発生順に関しては、AddHandlerで行った場合、その行った順番でイベントが発生します。&lt;br&gt;addHandler Button1.click addressof Test1&lt;br&gt;addHandler Button1.click addressof Test2&lt;br&gt;addHandler Button1.click addressof Test3 &lt;/p&gt;
&lt;p&gt;この場合は、Test1()→Test2()→Test3()と実行されます。&lt;br&gt;また、&lt;br&gt;addHandler Button1.click addressof Test1&lt;br&gt;addHandler Button1.click addressof Test1&lt;br&gt;と二回登録した場合は、二回Test1 が実行されます。&lt;br&gt;&lt;/p&gt;
&lt;p&gt;さらに、Test1に対して、Handles Button1.cllickと書くと、都合3回実行されることになります。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;この状態でRemoveHandler Button1.Click ,addressof Test1を行うと、登録されているものが一つだけなくなります。&lt;/p&gt;
&lt;p&gt;&lt;del&gt;今度は全く実行されません。&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;&lt;del&gt;これは直前に登録されたものを引っぺがすのではなく、全てざっくりなくなります。&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;&lt;del&gt;&lt;/del&gt;これは内部でListとして扱われているため、登録されたものが一つだけなくなります。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;p&gt;さて、Handlesで行った場合は、希望通りの実行はされません。 
&lt;p&gt;Private Sub C004(ByVal sender As System.Object, ByVal e As System.EventArgs)　Handles Button1.Click&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MsgBox("No1")&lt;br&gt;End Sub 
&lt;p&gt;Private Sub B002(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MsgBox("No2")&lt;br&gt;End Sub 
&lt;p&gt;Private Sub B003(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MsgBox("No3")&lt;br&gt;End Sub 
&lt;p&gt;私のマシン、No3→No1→No2でした。 
&lt;p&gt;#希望通りに行う方法があるのかどうかはちょっとわかりませんでした。 
&lt;p&gt;コンパイル時にAddHandlerのように登録順番が勝手に決められているのであれば、コンパイルしなおせば順番がかわるのか、&lt;br&gt;と思いきや変化しませんでした。&lt;/p&gt;
&lt;p&gt;&lt;br&gt;なんちゅうか、こっちが指定できない順番が、ソースをコンパイルした時点で変更できないような形で出来上がっているような印象です。&lt;br&gt;&lt;/p&gt;
&lt;p&gt;#おそらく、ここらへんはとりこびっちさんは「あたりめーだろ」的にスルーしてくれて、&lt;br&gt;#Hanldlesで指定したときの順番がどうやって決められているか、について追記してくれるに違いない。&lt;/p&gt;
&lt;p&gt;#2007/11/27追記 間違いがあったため修正&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/mrt/aggbug/103847.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Mr.T(mrt@wankuma.com)</dc:creator><title>Cast</title><link>http://blogs.wankuma.com/mrt/archive/2007/10/11/101307.aspx</link><pubDate>Thu, 11 Oct 2007 07:06:00 GMT</pubDate><guid>http://blogs.wankuma.com/mrt/archive/2007/10/11/101307.aspx</guid><wfw:comment>http://blogs.wankuma.com/mrt/comments/101307.aspx</wfw:comment><comments>http://blogs.wankuma.com/mrt/archive/2007/10/11/101307.aspx#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://blogs.wankuma.com/mrt/comments/commentRss/101307.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/mrt/services/trackbacks/101307.aspx</trackback:ping><description>&lt;p&gt;Mr.Tです、こんにちは。&lt;/p&gt; &lt;p&gt;ちょっと調べ物していたんですが...&lt;/p&gt; &lt;p&gt;変換ということで、TryParse、TryCastという形で、例外ださない方法がありますね。&lt;/p&gt; &lt;p&gt;今、調べたら、すでにひろえむさんが、&lt;a href="http://blogs.wankuma.com/hirom/archive/2007/03/08/65658.aspx"&gt;こんなエントリ&lt;/a&gt;を...&lt;br&gt;それは、おいといて。&lt;/p&gt; &lt;p&gt;で、気になったのが、directcastとTryCastの使い分け。&lt;br&gt;と、そっちも調べたら、じゃんぬさんが、&lt;a href="http://blogs.wankuma.com/jeanne/archive/2005/03/18/12271.aspx"&gt;こんなエントリ&lt;/a&gt;を...&lt;br&gt;ま、使うならCtypeじゃなくてDirectCastの方が、パフォーマンスもよく、暗黙の型変換しない、ということでお得ってことです。&lt;br&gt;それは、おいといて。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;で、自分の場合、変換できなかった場合ってのはフェッチしたいので、TryCastを使うほうが多いです。&lt;/p&gt; &lt;p&gt;&lt;br&gt;こんなところで例外だしたくねー、ってのもあるんですが、わざわざDirectCastを使うって場合は、「絶対にここじゃ&lt;br&gt;例外がおきねーよ」という認識があるからこそ、だと思います。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;でも、それを保障するのは、ナニをもって例外おきねーと判断すればいいのかとなると、これってテストとかで&lt;br&gt;こういう値は決して入ってこない、っていう判断からでOKなんでしょうかね？&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;それとも、もっと別な見方があるんでしょうか？&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/mrt/aggbug/101307.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Mr.T(mrt@wankuma.com)</dc:creator><title>Optionalをつける時</title><link>http://blogs.wankuma.com/mrt/archive/2007/10/03/99221.aspx</link><pubDate>Wed, 03 Oct 2007 00:24:00 GMT</pubDate><guid>http://blogs.wankuma.com/mrt/archive/2007/10/03/99221.aspx</guid><wfw:comment>http://blogs.wankuma.com/mrt/comments/99221.aspx</wfw:comment><comments>http://blogs.wankuma.com/mrt/archive/2007/10/03/99221.aspx#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://blogs.wankuma.com/mrt/comments/commentRss/99221.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/mrt/services/trackbacks/99221.aspx</trackback:ping><description>&lt;p&gt;Mr.Tです、こんにちは。&lt;/p&gt; &lt;p&gt;オノデラさん:&lt;a title="http://blogs.wankuma.com/yo/archive/2007/10/02/99154.aspx" href="http://blogs.wankuma.com/yo/archive/2007/10/02/99154.aspx"&gt;http://blogs.wankuma.com/yo/archive/2007/10/02/99154.aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;のエントリに対して、とりこびっちさんがつけたコメントにビクッと反応。言葉の意味を取り違えている可能性は大ww&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;わたしはVisual Basic であっても Optional はなんかしっくりきません･･･。&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;いや、Optionalは、いいものだ...&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;VB.NETになってから、メソッドのオーバーライドができるようになったので、引数を増やしたり、減らしたりと&lt;/p&gt; &lt;p&gt;いうことができるようになりました。大変、便利なものです。&lt;/p&gt; &lt;p&gt;例えば、絵を描くというメソッドがあった場合、&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Private キャンパス as 画用紙&lt;/p&gt; &lt;p&gt;Public Sub 絵を描く（byval 筆　as 絵筆）&lt;/p&gt; &lt;p&gt;　　線を引く(キャンパス,&amp;nbsp;筆,ここから、ここまで） &lt;/p&gt; &lt;p&gt;end sub&lt;/p&gt; &lt;p&gt;Public Sub 絵を描く(byval 筆 as 絵筆,byval 指定色 as 色)&lt;/p&gt; &lt;p&gt;　　筆.色&amp;nbsp; = 指定色&lt;/p&gt; &lt;p&gt;　　線を引く(キャンパス,&amp;nbsp;筆,ここから、ここまで） &lt;/p&gt; &lt;p&gt;End Sub&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Optionalを使うと、こんな形ですね。&lt;/p&gt; &lt;p&gt;Public Sub 絵を描く(byval 筆 as 絵筆,optional byval 指定色 as 色 = 赤)&lt;/p&gt; &lt;p&gt;　　筆.色&amp;nbsp; = 指定色&lt;/p&gt; &lt;p&gt;　　線を引く(キャンパス,&amp;nbsp;筆,ここから、ここまで） &lt;/p&gt; &lt;p&gt;End Sub&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;一番違うのは、Optionalの場合、引数に対して最初に初期値を与えないと赤で線が引かれてしまうわけです。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;しかし、Optionalの使い方は、オーバーライド的なものと、そういうもんじゃないものがあるような気がします。&lt;/p&gt; &lt;p&gt;例えば、&lt;/p&gt; &lt;p&gt;Public Sub 絵を描く（byval 筆　as 絵筆,Optional 上塗りフラグ as boolean = False）&lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if 上塗りフラグ then&lt;/p&gt; &lt;p&gt;(1)&amp;nbsp;&amp;nbsp;&amp;nbsp; 　　線を引く(キャンパス,&amp;nbsp;筆,ここから、ここまで）&amp;nbsp;&amp;nbsp; 'この場合は、下に絵が描かれていても上書き　&lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;/p&gt; &lt;p&gt;　　　Dim 線引きエリア as　エリア =&amp;nbsp;キャンパス.エリア取得(ここから,ここまで)&amp;nbsp;&lt;/p&gt; &lt;p&gt;　　　for&amp;nbsp;each 点 in 線引きエリア&lt;/p&gt; &lt;p&gt;　　　　　if 点がすでに塗られてる？=&amp;nbsp;false then&lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 　　　　点を描く(キャンパス,&amp;nbsp;筆,点） &lt;/p&gt; &lt;p&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;&amp;nbsp;end if&lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Next&lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp; end if&lt;/p&gt; &lt;p&gt;End Sub&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;こんな風。これがもし、Optiona 削除フラグ みたいなものなら、「線を消す」メソッドをつくりなさいよ、とか&lt;br&gt;キャンパスの下地色で線を引け、とかいう話になると思います。&lt;/p&gt;Optionalに描画メッセージ（線じゃなく、文字を書く）みたいなものも、だめです。&lt;br&gt;本来の意味が違うことになってしまうので。 &lt;p&gt;でも、わざわざ上塗りしないメソッドを別につくりたくないです。&lt;/p&gt; &lt;p&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;オーバーライドして上塗りフラグをつけてもいいのですが、(1)の部分が、二重になります。上記の例なら一行ですけど&lt;/p&gt; &lt;p&gt;これが複数行になった場合は、結構冗長になりそうな感じがします。&lt;/p&gt; &lt;p&gt;Optionalってのは、「本来のメソッドの意味を失わずに、その機能を細かく制限したいとき」に利用できるVBらしい&lt;/p&gt; &lt;p&gt;機能っていえるのじゃないでしょうか。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/mrt/aggbug/99221.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Mr.T(mrt@wankuma.com)</dc:creator><title>.NETで横倍角、縦倍角の文字を表示、印刷する</title><link>http://blogs.wankuma.com/mrt/archive/2007/09/10/95211.aspx</link><pubDate>Mon, 10 Sep 2007 20:04:00 GMT</pubDate><guid>http://blogs.wankuma.com/mrt/archive/2007/09/10/95211.aspx</guid><wfw:comment>http://blogs.wankuma.com/mrt/comments/95211.aspx</wfw:comment><comments>http://blogs.wankuma.com/mrt/archive/2007/09/10/95211.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blogs.wankuma.com/mrt/comments/commentRss/95211.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/mrt/services/trackbacks/95211.aspx</trackback:ping><description>&lt;p&gt;Mr.Tです、こんにちは。&lt;br&gt;&lt;/p&gt; &lt;p&gt;Ognasさんのエントリ:&lt;br&gt;&lt;a title="http://blogs.wankuma.com/ognac/archive/2007/09/10/95118.aspx" href="http://blogs.wankuma.com/ognac/archive/2007/09/10/95118.aspx"&gt;http://blogs.wankuma.com/ognac/archive/2007/09/10/95118.aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;上記のエントリの話は、エスケープシーケンス制御のプリンタに対して、.NETな世界から倍角なFontを発行なんぞ&lt;br&gt;できるもんか、ということなんでが、じゃあそもそも.NETな世界では倍角ってできないんか、とおもいちょっと作成。&lt;/p&gt; &lt;p&gt;VB.NETで新規プロジェクト作成して、FormにPictureBoxとボタンを一個貼り付け。&lt;/p&gt; &lt;p&gt;Private pSize As Integer = 2&lt;br&gt;Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim g As Graphics = PictureBox1.CreateGraphics()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g.Clear(Me.BackColor)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g.ScaleTransform(pSize, 1)&amp;nbsp; '横倍角&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pSize += 1&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim fnt As New Font("MS UI Gothic", 20)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g.DrawString("熊", fnt, Brushes.Black, 0, 0)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fnt.Dispose()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g.Dispose()&lt;br&gt;End Sub &lt;p&gt;あら簡単。というか、まあ適当なんで。&lt;br&gt;ScaleTransform(pSize, 1)のところで、サイズを指定しているわけです。というかこの場合だと、絵として表示しなくちゃ&lt;br&gt;なりませんね。&lt;/p&gt; &lt;p&gt;で、印刷してみようと思い、更にボタン一つ貼り付け。以下がソース全文。&lt;/p&gt; &lt;p&gt;Imports System.Drawing&lt;br&gt;Public Class Form1  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Private pSize As Integer = 2&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim g As Graphics = PictureBox1.CreateGraphics()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; g.Clear(Me.BackColor)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; g.ScaleTransform(pSize, 1)&amp;nbsp; '横倍角&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pSize += 1&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim fnt As New Font("MS UI Gothic", 20)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; g.DrawString("熊", fnt, Brushes.Black, 0, 0)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fnt.Dispose()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; g.Dispose()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End Sub  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Private Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim pd As Printing.PrintDocument = New Printing.PrintDocument  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AddHandler pd.PrintPage, AddressOf pd_PrintPage  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If MessageBox.Show("印刷しちゃうぞ？", "確認", MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.Yes Then&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; pd.Print()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End Sub  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Private Sub pd_PrintPage(ByVal sender As Object, _&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ByVal e As System.Drawing.Printing.PrintPageEventArgs)&lt;br&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; Dim fnt As New Font("MS UI Gothic", 20)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; e.Graphics.ScaleTransform(pSize, 1) '横倍角&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; e.Graphics.DrawString("熊", fnt, Brushes.Black, 0, 0)&lt;br&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; e.HasMorePages = False  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fnt.Dispose()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End Sub&lt;br&gt;End Class &lt;p&gt;&lt;a href="http://mrt.wankuma.com/PIC/2007/09/48fd172b92b0.NET_5235/20070911001.jpg" atomicselection="true"&gt;&lt;img height="128" alt="実行画面" src="http://mrt.wankuma.com/PIC/2007/09/48fd172b92b0.NET_5235/20070911001_thumb.jpg" width="240"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;プリンタに対しても、やっぱり画像描画みたいになるんで、横倍角なFontクラス自体は無理。&lt;br&gt;レイアウト的に、画像として利用できるような（イラストの一部に利用したいとか）なら、できそうな気もしますが&lt;br&gt;それ以外の使い道はなさそうな気もします。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/mrt/aggbug/95211.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>