デリゲート

Size: px
Start display at page:

Download "デリゲート"

Transcription

1 デリゲート デリゲート入門 概要 昔の PC のコーディング 世界初の 8 bit マイクロプロセッサは Intel の 8008 と謂うチップで プログラムは数字の羅列の機械語で書いて居た ジャンプ命令等は 飛び先のメモリの番地を直接書く訳で有る 此の為 プログラマは 常に紙に書いたメモリマップを持って居た 其の内に ニーモニックが出現し 数字の羅列の機械語から 命令等は より人間に解り易いアルファベットに依る文字に成った ジャンプ先等の番地も数字でアドレスを書くのではなく 文字に依るラベルが使える様に成り プログラミングの作業性が一段と向上した 文字やラベルは アセンブラと呼ばれるプログラムが CPU が理解出来る機械語に翻訳するので有る デリゲートはメソドの参照を保持 や でメソドと呼ばれる物はプログラムのブロックで メモリー上の何処かに有る メソドを呼び出すと謂う事は 機械語で謂えば ジャンプ命令が行われると謂う事で有る 但し FrameWork のプログラマは 其のメソドがメモリー上の何処に有るか等と謂う事は知らなくても良いので有る 番地に相当する名前を書く丈でメソドを呼び出す事が ジャンプ命令等と夢にも思っては居ない 現代のプログラマに取っては ジャンプ命令は禁句で ジャンプ命令は構造化の敵なので有る 扨て デリゲートだが デリゲートはメソドの参照を持つクラスで有る 参照とは平易に謂うとアドレスで有る 詰り デリゲートは名前でなく メソドをアドレスで呼び出す事の出来るクラスなので有る クラスに有るメソドの参照 ( アドレス ) をデリゲートに登録して置くと 其のメソドを デリゲートで呼び出す事が出来るので有る ( 厳密には デリゲートが保持するのは クラスのインスタンスのメソドの参照で有る ) 何故アドレスで呼び出すのか? 何故 折角名前で呼び出せる物を昔の様にアドレスで呼び出そうとするので有ろうか 例えば 或る大きなファイルを読み書きする時 其の処理をメインスレッドで行うと 読み書きして居る間 スレッドが固まって了う ( 其の処理に占有される ) 此れを避ける為に 通常 読み書きはメインスレッドとは別のスレッドを作成して 非同期に操作が行われる 斯うすると メインスレッド上で他の作業の継続が可能に成るので有る 但し 多くの場合 呼出側のスレッドでも読み書きの終了や 読み込んだファイルの内容が知り度い場合が有る 詰り 読み書きを指示したスレッドの指定したメソドに読み書きを仕て居るスレッドから報告 ( コールバック ) が欲しいので有る -1-

2 其れには 新しく作成された読み書きを行うスレッドに対して 此処に通知しなさいと謂う何等かの情報を渡す必要が有る 此の為に使われるのが 通知す可きメソドのアドレスで有る 確かに メソドの名前を渡す方法も考えられるが 読み書きを行うスレッドを作成したスレッドも複数のインスタンスを持って居る可能性が有り 名前を渡す場合は 何等かの方法でインスタンスを区別しなければ成らない アドレスは 複数のインスタンスが有っても インスタンス毎に異なる 即ち アドレスを使うと 目的のインスタンスのメソドを確実に渡す事が出来る 此の考え方は や のイベントの方法にも採られて居る イベントもデリゲートを使って行われるので有る デリゲートのプロトタイプ宣言 但し デリゲートが 単純にメソドのアドレスを保持して居て 其のアドレスにジャンプした丈では不具合が生じる メソドには 引数を取る物や 戻り値を返す物が有るからで有る 其処で 目的のメソドのアドレスを保持する事が出来るデリゲートクラスは 必ず其のメソドと同じ戻り値や引数を設定出来る方法で宣言する ( デリゲートのプロトタイプ宣言 ) コンパイラは 其のプロトタイプを見て 其のデリゲートが目的のメソドの引数や戻り値にマッチして居るか否かを確認し 安全性を保障する 若し 其れが一致して居なければ ビルド時にエラーを報告する筈で有る 詰り デリゲートは 単にクラスのインスタンスのメソドのアドレスを保持する丈ではなく 引数と返値の受け渡しも行なうので有る デリゲートの実際例 下記は 文字列を引数に取り 戻り値を返さないデリゲートのクラスの宣言で有る ( プロトタイプ ) で有る 此のデリゲートクラスは 同じ引数を持ち 同じ戻り値を持つメソドで有れば 何の様なメソドで有っても 其の参照 ( アドレス ) を保持する事が出来る Delegate Sub dlgwritestring(byval msg As String) delegate void dlgwritestring(string msg); 此のデリゲートを使って 下記のクラスの WriteMessage メソドを呼び出して観る Class WriteToScreen Public Sub WriteMessage(ByVal msg As String) Console.WriteLine(msg) End Class class WriteToScreen -2-

3 public void WriteMessage(string msg) Console.WriteLine(msg); デリゲートは クラスで有る為 下記の様に インスタンスを作り コンストラクタには 保持す可きクラスのインスタンスのメソドを指定する Dim Dws As New dlgwritestring(addressof ws.writemessage) dlgwritestring dws = new dlgwritestring(ws.writemessage); デリゲートを実行するには 下記の様にすれば良いので有る Dws(msg) dws(msg); Action<T> 扨て デリゲートの宣言 ( プロトタイプ ) だが FrameWork には既定の宣言 ( 既に行われて居る ) が有る Action<T> と呼ばれる物で 1 個の引数と戻り値が無いデリゲートが宣言されて居る (Action<T> は FrameWork2.0 以上で使用可で FrameWork3.0 以上では更に色々な既定のデリゲートが有る ) <T> の T には タイプが入る 上記のデリゲートは 下記の様に成る Dim Wm As New Action(Of String)(AddressOf ws.writemessage) Action<string> wm = new Action<string>(ws.WriteMessage); 上記で使用した下記のプロトタイプは 必要無く成る Delegate Sub dlgwritestring(byval msg As String) delegate void dlgwritestring(string msg); デリゲートと匿名メソド 扨て 今少し話を進めて観る事にする には 匿名メソドと謂う物が有る ( 残念乍 2005 には無い ) -3-

4 public void WriteMessage(string msg) Console.WriteLine(msg); 上記は WriteMessage と謂う名前を持って居る 此れに対して 匿名メソドとは 此の様な名前を持たないメソドで有る 此れを使うと 下記の様に 引数を持たないデリゲートを宣言する事が出来る delegate void dlgawrite(); 然して 下記の様に インラインで メソドを使用する事が可能と成る dlgawrite da = delegate() Console.WriteLine(msg);; da(); 此の匿名メソドに依るデリゲートは 其れが実行されるクラスのスコープを持つ為に 引数の省略が出来て オーバーヘッドが少ない事と デリゲートの為のメソドが同じ場所に書かれて居る為にコードが観易い利点が有る デリゲートの実際例 Imports System Imports System.Collections.Generic Imports System.Text Module Module1 Delegate Sub dlgwritestring(byval Msg As String) Sub Main() Dim Msg As String = "Hello World!" ' 此れはデリゲートとは関係無い普通の呼出 Dim Ws As New WriteToScreen() Ws.WriteMessage(Msg) ' デリゲートのインスタンスを作成して WriteToScreen の WriteMessage のアドレスを登録 Dim Dws As New dlgwritestring(addressof ws.writemessage) Dws(Msg) ' FrameWork で宣言済みの Action デリゲートを使用 Dim Wm As New Action(Of String)(AddressOf ws.writemessage) Wm(msg) End Module -4-

5 ' デリゲートで呼ばれるメソドを持つクラス Class WriteToScreen ' デリゲートで呼ばれるメソド Public Sub WriteMessage(ByVal Msg As String) Console.WriteLine(Msg) End Class using System; using System.Collections.Generic; using System.Text; namespace DlegateTest delegate void dlgwritestring(string msg); delegate void dlgawrite(); // デリゲートで呼ばれるメソドを持つクラス class WriteToScreen // デリゲートで呼ばれるメソド public void WriteMessage(string msg) Console.WriteLine(msg); class Program static void Main(string[] args) string msg = "Hello World!"; // 此れはデリゲートとは関係無い普通の呼出 WriteToScreen ws = new WriteToScreen(); ws.writemessage(msg); // デリゲートのインスタンスを作成して WriteToScreen の WriteMessage のアドレスを登録 dlgwritestring dws = new dlgwritestring(ws.writemessage); // デリゲートの呼出 dws(msg); // FrameWork で宣言済みの Action デリゲートを使用 Action<string> wm = new Action<string>(ws.WriteMessage); wm(msg); // 匿名メソドを使用したデリゲート -5-

6 dlgawrite da = delegate() Console.WriteLine(msg);; da(); デリゲート 此の記事は ソフトウェアに関する物で 一般の人は スルーで御願いする 時と仕て プログラムの解説書は 物凄く難しい説明をして有る 例えば プログラミング と謂う本に依ると デリゲートとはメソッドをカプセル化するクラスで有る と書かれて居る 此れを読んで直ぐに 成る程! と思う人は 此の本を読む必要の無い人か 余程早合点の人で有ろう 若し 車とは 物や人を乗せる ガソリンで走る乗り物で有る と謂うと 電気自動車も有れば 乗り物でない車も有ると反論されるだろう 其処で 車とは車輪が付いた物で有る と謂えば 多分正しいだろうが 此れでは実際の物をイメージする事は難しい 然う謂う事で 可成り大雑把な概念で デリゲート を解説して観る プログラムの中で関数 ( メソッド ) は名前で呼び出される事が多い 例えば hoge(a,b) と謂った具合で有る 扨て hoge と謂う名前は クラスの中で付いて居る クラスは 型で有るから スタンプの様にプログラムの中に 其の複製を幾つでも作る事が出来る 複製は インスタンスと呼ばれて 実際にメモリ上のアドレスを持つ 通常 此のインスタンスの中の名前は スレッドと呼ばれる物の中で管理されて居て 名前の重複は無い 例えば クラスのインスタンスが東京都の区だとすると 杉並区の中には hoge は一人しか許されない 従って 杉並区の中で hoge さんを呼び出すと 正確に hoge さんに届く 併し 世田谷区にも hoges さんが居る可能性が有る 東京都の中で hoge さんを呼ぶと 彼方の区から此方の区からも hoge さんが返事をして 杉並区の higes さんは誰だか解らない 仕方が無いので 名前で呼ぶ事は止めて 東京都の番地で呼ぼうと謂う事に成る 東京都の番地は 即ち メモリ上のアドレスと謂う事に成る 何の事は無い 名前で呼ぶ代わりにアドレスで呼ぶ丈で有る 元々 コンピューターのマシン語はアドレスで呼ぶのだから 但し 関数の呼出は 引数が有り 戻り値が有る 其処で 戻り値や引数の形や数が同じ番地を保持出来る箱を用意して 其の中に番地や引数を入れて引き渡そうと謂うのがデリゲートなので有る 斯うするとスレッドを跨った関数呼出が可能と成るのだ -6-

7 マルチスレッド入門 マルチスレッドとは何か ( セカンドスレッドからメインスレッドを操作 ) マルチスレッドとは 並列処理で有る CLR(Common Language Runtime) は 簡単にマルチスレッドを実現するクラスを持って居る 例えば Stream クラス等はマルチスレッド使用して ファイルの書込や読出を効率良く行う 殆どの場合は 明示的に複数のスレッドを管理する必要は無いが 一部のクラスは マルチスレッドの管理が不可欠と成る 例えば ストップウオッチをマルチスレッドで作成して カウントはセカンドスレッドで 表示をメインスレッドで行なう場合は スレッドを意識したコーディングが必要に成る 亦 RS-232C の Com イベントは セカンドスレッドで発生する 此の為 セカンドスレッドで取得したデータをメインスレッドで表示し度い場合や ピンチェンジをメインスレッドで表示し度い場合は マルチスレッドを理解する必要が有る 此処では 最初に直面するマルチスレッドの問題点に焦点を絞って説明する ( 以下のマルチスレッドの説明には デリゲートの理解が必要で有る ) 試しに 簡単なマルチスレッドのコードを作成して観る事にする 先ず フォームにラベル (lbltime) を 1 個貼り付ける 続いて ボタンを 2 個貼り付ける 1 番目のボタン (btncommon) を押すと ラベルに現在の時間が表示される 2 番目のボタン (btnthread) を押すと 第 2 スレッドを作成して第 2 スレッドからラベルに時間を表示する事にする ボタンをクリックした時の呼び出されるジェネラルプロシージャ ( 関数 ) を 予め 下記の様に定義 ( 記述 ) して置く事にする ' 時間を表示するジェネラルプロシージャ Private Sub SetTime() Call DisplayTime() Private Sub DisplayTime() ' 現在の時間の表示 lbltime.text = DateTime.UtcNow.AddHours(9).ToString("HH:mm:ss") // 時間を表示するジェネラルプロシージャ public void SetTime() DisplayTime(); void DisplayTime() // 現在の時間の表示 lbltime.text = DateTime.UtcNow.AddHours(9).ToString("HH:mm:ss"); -7-

8 1 番目のボタンのクリックイベントでは 下記の様に 単純に SetTime を呼び出す事にする Call SetTime() SetTime(); 2 番目のボタンのクリックイベントの中で第 2 スレッドを作成するコードは 下記の様に成る Dim T1 As System.Threading.Thread = _ New System.Threading.Thread(New ThreadStart(AddressOf SetTime)) System.Threading.Thread t1 = new System.Threading.Thread(new System.Threading.ThreadStart(SetTime)); 上記のコードは スレッドクラスのインスタンスを作成して居る New Tread(New ) は コンストラクタで有る コンストラクタの引数とは 何で有ろうか 実は 此れは Delegate で有る Thread コンストラクタは Delegate 型の引数を 1 個取る 此の引数には CLR(Common Language Runtime) に有る ThreadStart デリゲートを使用して居る 因みに ThreadStart デリゲートは CLR の中で 下記の様に定義されて居る Public Delegate Sub TreadStart() public delegate void TreadStart(); TreadStart デリゲートに登録されるメソドはスレッドで実行し度い SetTime メソドで有る 扨て スレッドのインスタンスを作成した丈では スレッドはスタートしない スレッドの実行をスタートさせる為には 下記の様に Tread クラスの Start メソドを呼び出す必要が有る T1.Start() t1.start(); 此れで第 2 スレッドがスタートする 問題は此れからで有る 第 2 スレッドの中からデリゲートで呼び出されるメソドの SetTime プロシージャ ( メソド ) の中には 現在 DisplayTime プロシージャを呼び出す処理しか記述されて居ない 此のプロシージャは lbltime の Text プロパティに文字列を設定する物で有る コンピュータの設定に依り Now では世界時が表示される事が有るので 世界時から 9 時間を加算して 常に日本標準時を表示する様に仕て居る 以上を実行すると 下記の例外 ( エラー ) が発生する -8-

9 マルチスレッドの場合 メインスレッド以外のスレッドからメインスレッドに有るコントロールにアクセスしようとすると アクセスが拒否されるので有る 其れでは マルチスレッドの場合 メインスレッド以外からメインスレッドのコントロールにアクセス出来ないのだろうか 答えは 出来る で有る メインスレッド以外からメインスレッドのコントロールにアクセスするには デリゲート ( 委譲 ) を使用する デリゲートを使用するには 先ず 下記の様に コードの宣言部分で 使用目的に応じた引数を持つデリゲートを宣言する ( 此処では MyDelegate と謂う名前を付けたが 任意の名前を付ける事が出来る ) ' デリゲートの宣言 Delegate Sub MyDelegate() // デリゲートそ宣言する delegate void MyDelegate(); 此のデリゲートを通じて プロシージャを呼び出す事に依り メインスレッド以外からメインスレッドのコントロールにアクセスする事が可能に成る Invoke(New MyDelegate(AddressOf DisplayTime)) Invoke(new MyDelegate(DisplayTime)); メイン以外のスレッドからメインスレッドのコントロールにアクセスする場合は Call( 呼出 ) ではなく Invoke( 呪文で呼出 ) を使用する 此の Invoke は Control.Invoke と謂われる物で デリゲートを引数に取り 引数のデリゲートの実行をコントロールの有るメインのスレッドで行なう物で有る -9-

10 Invoke は Form が持つメソドで有り 下記の様に書き換える事が出来る ( 上記の記述では 恰も昔の関数の様に観えるが 実は フォームクラスのコードでは フォームを表す Me や this を省略する事が出来るので 省略して居る丈で有る ) Me.Invoke(New MyDelegate(AddressOf DisplayTime)) this.invoke(new MyDelegate(DisplayTime)); 亦 ラベルやボタンと謂うコントロールも Form から派生した物なので 当然 Invoke メソドを継承して居る 従って 上記は 下記の様に記述する事も可能で 実行結果は同じに成る lbltime.invoke(new MyDelegate(AddressOf DisplayTime)) btncommon.invoke(new MyDelegate(AddressOf DisplayTime)) lbltime.invoke(new MyDelegate(DisplayTime)); btncommon.invoke(new MyDelegate(DisplayTime)); 処で SetTime プロシージャ ( メソド ) は ボタン 1 を押した時にも呼び出される ボタン 1 を押した時は 通常のメインスレッドからの呼出と成り Invoke メソドを使う必要は無い ( 使用しても 例外は発生せず 正しく動作する ) 其処で Invoke メソドが必要か否かを判断する InvokeRequired と謂うメソドが有り Invoke が必要な時は True( では true) を返す 下記のコードは Invoke が必要か否か 即ち メソドがメインスレッドから呼び出されたのか 又は メインスレッド以外から呼び出されたかを判断して処理を行う為の条件分岐で有る If InvokeRequired Then if (InvokeRequired) 従って SetTime プロシージャ ( メソド ) を 下記の様に記述すれば メソドがメインスレッドから呼び出されたのか 又は メインスレッド以外から呼び出されたかを判断して処理を行う事が出来る ' 時間を表示するジェネラルプロシージャ Private Sub SetTime() If InvokeRequired Then ' Invoke が必要な場合は Invoke で表示 Invoke(New MyDelegate(AddressOf DisplayTime)) Else DisplayTime() End If // 時間を表示するジェネラルプロシージャ public void settime() if (InvokeRequired) // Invoke が必要な場合は Invoke で表示 Invoke(new MyDelegate(DisplayTime)); else DisplayTime(); -10-

11 以上を纏めると 下記の様に成る マルチスレッドは Threading の Tread クラスを使用する Tread クラスのコンストラクタは TreadStart デリゲートを引数に取る TreadStart デリゲートにはスレッドで実行したいメソドを登録する Tread を実行するには Trear クラスの Start メソドを呼び出す メインスレッド以外からメインスレッドのコントロールにアクセスする場合は Control.Invoke を使用する Invoke メソドはデリゲートを引数に取り 其のデリゲートには実行したいメソドを登録する サンプルコード 共に フォームに ラベル 1 個 (lbltime) とボタン 2 個 (btncommon btnthread) を貼り付ける Imports System.Threading Public Class thread ' デリゲートの宣言 Delegate Sub MyDelegate() ' 時間を表示するジェネラルプロシージャ Private Sub SetTime() If InvokeRequired Then ' Invoke が必要な場合は Invoke で表示 Invoke(New MyDelegate(AddressOf DisplayTime)) Else DisplayTime() End If Private Sub DisplayTime() ' 現在の時間の表示 lbltime.text = DateTime.UtcNow.AddHours(9).ToString("HH:mm:ss") ' ボタン (Common) がクリックされた時の処理 Private Sub btncommon_click(byval sender As System.Object, _ ByVal e As System.EventArgs) Handles btncommon.click Call SetTime() ' ボタン (Thread) がクリックされた時の処理 Private Sub btnthread_click(byval sender As System.Object, ByVal e As System.EventArgs) _ Handles btnthread.click Dim T1 As System.Threading.Thread = _ New System.Threading.Thread(New ThreadStart(AddressOf SetTime)) T1.Start() End Class -11-

12 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Threading; namespace thread public partial class thread : Form // デリゲートの宣言 delegate void MyDelegate(); public thread() InitializeComponent(); // 時間を表示するジェネラルプロシージャ public void SetTime() if (InvokeRequired) // Invoke が必要な場合は Invoke で表示 Invoke(new MyDelegate(DisplayTime)); else DisplayTime(); void DisplayTime() // 現在の時間の表示 lbltime.text = DateTime.UtcNow.AddHours(9).ToString("HH:mm:ss"); // ボタン (Common) がクリックされた時の処理 private void btncommon_click(object sender, EventArgs e) SetTime(); // ボタン (Thread) がクリックされた時の処理 private void btnthread_click(object sender, EventArgs e) System.Threading.Thread t1 = new System.Threading.Thread(new System.Threading.ThreadStart(SetTime)); t1.start(); -12-

13 イベント入門 イベントとは ボタンをクリックするとクリックイベントが発生する 亦 テキストボックスに文字を入力するとテキストチェンジイベントが発生する 此の様な事は説明されなくても解る思う 其れでは イベントは何の様に作られるのだろうか 此処では イベントが何の様に作成されるのかコードのサンプルを示し乍説明する イベントで時計を作成 何の変哲も無い時計を考えて観る事にする 上図のプログラムでは プログラムをスタートすると 秒単位の時間が表示される 時間の表示は ラベルのテキストとフォームのテキスト両方に表示する 扨て 実際のプログラムで有るが 時間を表示するフォームとクラス 其れと時間を計測する Clock クラス イベントの引数の EventArgs から派生し イベントの時間を保持する TimeInfoEventArgs クラスの 3 個を持つ 起動フォームでは Clock のインスタンスを作成して 此の中のメソドの Run を呼び出す 呼出は フォームの Load が終わってからとする為 タイマーを使って タイマー内から呼び出す物とする 時間は Clock クラスの Run メソドで計測される Run は 無限のループに成って居て 秒が変わるとイベントが発生する でイベントを発生には イベントを発生させるクラスで Event ステートメントに依りイベントを宣言し RaiseEvent ステートメントに依りイベントを発生させる では イベントの宣言の仕方に 2 種類有る 先ず 下記の様に デリゲートを先ず宣言し 其の後に Event ステートメントに依りイベントを宣言する方法が有る Public Event OnSecondChange(ByVal sender As Object, ByVal ti As TimeInfoEventArgs) 次に 下記の様に デリゲートとイベントを同時に宣言する方法で有る Public Event OnSecondChange(ByVal sender As Object, ByVal ti As TimeInfoEventArgs) -13-

14 一方 では デリゲートを使用して イベントを発生させる 此の方法は の初めに書いた方法と同じで有る // デリゲートの宣言 public delegate void SecondChangeHandler(object clock, TimeInfoEventArgs timeinformation); // イベントの作成 public event SecondChangeHandler OnSecondChange; 孰れにしろ イベントは デリゲートに依って実現される事を理解する事が重要で有る ループの中の Application.DoEvents は ループ処理中に 他のスレッドに処理を回す為の物で有り System.Threading.Thread.Sleep(2) もループの実行を 2mSec 休む事に依り CPU の負荷を下げ 亦 他のスレッドに処理を回す イベントの引数と仕ては イベント発生元の Clock のインスタンスと EventArgs から継承された TimeInfoEventArgs が渡される 表示される時間は 此の中の TimeInfoEventArgs が保持して居る 引数にイベント発生元のインスタンスと EventArgs 又は 其れの継承された物を指定するのは イベントの慣例で有り 必然性は無いが コードを解りや易くする為にも 慣例を守り度い 扨て イベントを受信する方で有るが イベントの登録は 下記の様に記述する 此の場合は 複数登録が可能な事を示す為に 2 個のメソドを登録して居る 此のイベントの登録は 幾つでも登録出来 登録されて順番に実行される AddHandler MyClock.OnSecondChange, AddressOf SecondChanged AddHandler MyClock.OnSecondChange, AddressOf FormTextChange myclock.onsecondchange += new Clock.SecondChangeHandler(SecondChanged); myclock.onsecondchange += new Clock.SecondChangeHandler(FormTextChange); イベントは デリゲートのリストを保持するクラス内のフィールドで有ると謂われる 此れは何の様な意味なのだろうか OnSecondChange は Clock クラスの中に有って リスト形式で デリゲートの参照を保持して居るので有る リストは 新しくイベントを登録する事も可能で有り 実行は登録順に行われる の場合 イベントの登録取り消しに -= を使用するのも興味深い処で有る には 匿名メソドを謂う物が有り メソドを別に記述しなくても コード其の物を記述出来る myclock.onsecondchange += new Clock.SecondChangeHandler(SecondChanged); // イベントから呼ばれるメソド public void SecondChanged(object theclock, TimeInfoEventArgs ti) -14-

15 lbltime.text = string.format("0:00",ti.hour) + ":" + string.format("0:00",ti.minute) + ":" + string.format("0:00",ti.second); // 匿名メソドで記述 myclock.onsecondchange += delegate(object theclock, TimeInfoEventArgs ti) lbltime.text = string.format("0:00", ti.hour) + ":" + string.format("0:00", ti.minute) + ":" + string.format("0:00", ti.second); ; 匿名メソドは コードの中に埋め込む物で 最後にセミコロン ( ; ) が付くので注意され度い 此の匿名メソドを使用する時は SecondChanged のメソドは不要と成る 最後に Form1_FormClosing の中に書かれた Environment.Exit(0) で有るが プログラムを終了しようと仕て を押し プログラムが終了途中に 再びループが実行され プログラムが正常に終了しない事が有る Environment.Exit(0) は プログラムを強制的に終了させるメソドで有る Public Class EventClock Private MyClock As Clock = New Clock() ' 上のコードは下のコードでも良い ' Private WithEvents MyClock As New Clock ' フォームが読み込まれた時の処理 Private Sub EventClock_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles MyBase.Load tmrstart.enabled = True ' フォームが閉じられ様と仕た時の処理 Private Sub EventClock_FormClosing(ByVal sender As Object, _ ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing Environment.Exit(0) ' タイマーが一定間隔で自動的に行う処理 Private Sub tmrstart_tick(byval sender As System.Object, ByVal e As System.EventArgs) _ Handles tmrstart.tick ' タイマーの停止 tmrstart.enabled = False ' イベントの登録 (2 個登録 ) AddHandler MyClock.OnSecondChange, AddressOf SecondChanged AddHandler MyClock.OnSecondChange, AddressOf FormTextChange -15-

16 ' 時計の始動 MyClock.Run() ' イベントから呼ばれるメソド 1 Public Sub SecondChanged(ByVal sender As Object, ByVal e As TimeInfoEventArgs) lbltime.text = String.Format("0:00", e.hour) & ":" & _ String.Format("0:00", e.minute) & ":" & _ String.Format("0:00", e.second) ' イベントから呼ばれるメソド 2 Public Sub FormTextChange(ByVal sender As Object, ByVal e As TimeInfoEventArgs) Me.Text = " デジタル時計 " & String.Format("0:00", e.hour) & ":" & _ String.Format("0:00", e.minute) & ":" & _ String.Format("0:00", e.second) End Class ' EventArgs を継承した新しい EventArgs Public Class TimeInfoEventArgs Inherits EventArgs ' 時 分 秒のフィールド追加 Public ReadOnly Hour As Integer Public ReadOnly Minute As Integer Public ReadOnly Second As Integer ' 新しい EventArgs のコンストラクタ Public Sub New(ByVal Hour As Integer, ByVal Minute As Integer, ByVal Second As Integer) Me.Hour = Hour Me.Minute = Minute Me.Second = Second End Class ' 時計クラス Public Class Clock Private Hour As Integer Private Minute As Integer Private Second As Integer ' デリゲートの宣言 Public Delegate Sub SecondChangeHandler(ByVal sender As Object, _ ByVal e As TimeInfoEventArgs) ' イベントの作成 Public Event OnSecondChange As SecondChangeHandler -16-

17 ' 上の 2 行は下記の 1 行でも良い ' Public Event OnSecondChange(ByVal sender As Object, ByVal e As TimeInfoEventArgs) Public Sub Run() Do ' 制御を OS に戻す Application.DoEvents() ' 2 ミリ秒の停止 System.Threading.Thread.Sleep(2) ' 現在時間 ( 日本標準時 ) の設定 Dim Dt As System.DateTime = System.DateTime.UtcNow.AddHours(9) ' 秒が更新された時の処理 If Not Dt.Second = Second Then Dim Ti As TimeInfoEventArgs = _ New TimeInfoEventArgs(Dt.Hour, Dt.Minute, Dt.Second) ' イベントが登録されて居る時の処理 Try ' イベントの発生 RaiseEvent OnSecondChange(Me, Ti) Catch ' 特に何も仕無い End Try End If ' 時間の更新 Me.Second = Dt.Second Me.Minute = Dt.Minute Me.Hour = Dt.Hour Loop End Class using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace EventClock public partial class EventClock : Form // 時計のインスタンスを作成 Clock myclock = new Clock(); -17-

18 public EventClock() InitializeComponent(); // フォームが読み込まれた時の処理 private void EventClock_Load(object sender, EventArgs e) tmrstart.enabled = true; // フォームが閉じられ様と仕た時の処理 private void EventClock_FormClosing(object sender, FormClosingEventArgs e) Environment.Exit(0); // タイマーが一定間隔で自動的に行う処理 private void tmrstart_tick(object sender, EventArgs e) // タイマーの停止 tmrstart.enabled = false; // イベントの登録 (2 個登録 ) myclock.onsecondchange += new Clock.SecondChangeHandler(SecondChanged); myclock.onsecondchange += new Clock.SecondChangeHandler(FormTextChange); // イベントの登録は下記の記述でも良い // myclock.onsecondchange += SecondChanged; // 時計の始動 myclock.run(); // イベントから呼ばれるメソド 1 public void SecondChanged(object theclock, TimeInfoEventArgs e) lbltime.text = string.format("0:00", e.hour) + ":" + string.format("0:00", e.minute) + ":" + string.format("0:00", e.second); // イベントから呼ばれるメソド 2 public void FormTextChange(object theclock, TimeInfoEventArgs e) this.text = " デジタル時計 " + string.format("0:00", e.hour) + ":" + string.format("0:00", e.minute) + ":" + string.format("0:00", e.second); -18-

19 // EventArgs を継承した新しい EventArgs public class TimeInfoEventArgs : EventArgs // 時 分 秒のフィールドを追加 public readonly int hour; public readonly int minute; public readonly int second; // 新しい EventArgs のコンストラクタ public TimeInfoEventArgs(int hour, int minute, int second) this.hour = hour; this.minute = minute; this.second = second; // 時計クラス public class Clock private int hour, private int minute, private int second; // デリゲートの宣言 public delegate void SecondChangeHandler( object clock, TimeInfoEventArgs timeinformation); // イベントの作成 public event SecondChangeHandler OnSecondChange; public void Run() while(true) // 制御を OS に戻す Application.DoEvents(); // 2 ミリ秒の停止 System.Threading.Thread.Sleep(2); // 現在時間 ( 日本標準時 ) の設定 System.DateTime dt = System.DateTime.UtcNow.AddHours(9); // 秒が更新された時の処理 if (dt.second!= second) TimeInfoEventArgs timeinformation = new TimeInfoEventArgs(dt.Hour, dt.minute, dt.second); // イベントが登録されて居る時の処理 ( デリゲートを実行 ) if (OnSecondChange!= null) OnSecondChange(this, timeinformation); // 時間の更新 this.second = dt.second; this.minute = dt.minute; this.hour = dt.hour; -19-

20 デリゲートとイベント デリゲートとイベント テキストエディタで改行を行なうと 改行の前に が入る物が有る 此れは TextChanged イベント内に 改行の前に を入れる処理を書けば良い丈で有るが 今回は少し捻って TextBox クラスを継承した新しい TextBox クラスを作成し 其れに 文末が改行で有れば イベントで知らせるコードを追加して観る事にする 先ず 開発環境を起動して 空のフォームを作り プルダウンメニューのプロジェクト クラスの追加で 新しいクラスを追加する 然して 同じ名前空間で TextBox クラスから継承された新しい TextBox クラスを作る イベントの publish( 発行側 ) TextBox を継承したクラスを作成する Public Class TextBoxEx Inherits System.Windows.Forms.TextBox public class TextBoxEx : System.Windows.Forms.TextBox も も殆ど変わりは無いが には Inherits キーワードが付く 扨て 此の新しいテキストボックスの中で 本来 TextBox が持つ OnTextChanged を書き換えて ( オーバーライド ) 新しいイベントを作成する事にする Public Class EventTextbox ' 未実装 End Class ' 拡張テキストボックス Public Class TextBoxEx Inherits System.Windows.Forms.TextBox -20-

21 ' デリゲートの宣言 Public Delegate Sub DelegateNewLine(ByVal sender As Object, ByVal e As EventArgs) ' デリゲートでイベントを宣言 Public Event TextNewLine As DelegateNewLine ' TextBox の OnTextChanged の上書 Protected Overrides Sub OnTextChanged(ByVal e As EventArgs) ' 本来のイベントの呼出 MyBase.OnTextChanged(e) ' Text の最後が改行で 而も が無ければイベント発生 If MyBase.Text.EndsWith(Environment.NewLine) AndAlso _ Not MyBase.Text.EndsWith(" " + Environment.NewLine) Then RaiseEvent TextNewLine(Me, e) End If End Class using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace EventTextbox public partial class EventTextbox : Form public EventTextbox() InitializeComponent(); // 拡張テキストボックス public class TextBoxEx : TextBox // デリゲートの宣言 public delegate void DelegateNewLine(object sender, EventArgs e); // デリゲートでイベントを宣言 public DelegateNewLine TextNewLine; -21-

22 // TextBox の OnTextChanged の上書 protected override void OnTextChanged(EventArgs e) // 本来のイベントの呼出 base.ontextchanged(e); // Text の最後が改行で 而も が無ければイベントを発生 if (base.text.endswith(" r n") &&!base.text.endswith(" r n")) TextNewLine(this, e); 本来のテキストボックスで定義された OnTextChanged イベントを書き換えるのは Overrides( では override) キーワードで有る 上記のコードに於ける RaiseEvent TextNewLine(Me, e)( では TextNewline(this, e)) では デリゲートでイベントを発生させて居る 斯うする事に依り 此の拡張テキストボックスを使用するクラスのイベントを呼び出す事が出来る 猶 此の場合 引数付けなくても良いが 慣例に従い 送り手で有る自分のインスタンスと 標準のイベント引数の EventArgs を渡して居る 此れ丈宣言して置いて 実際の参照は 此の拡張テキストボックスを使用するフォームの中で設定するので有る 因みに 上記のコードで有るが の場合は イベント専用の書き方が有り 下記の様に デリゲートでイベントの宣言に event キーワードを付ける事で 此の変数がイベント処理専用と仕て 宣言されるので有る public DelegateNewLine TextNewLine; public event DelegateNewLine TextNewLine; 亦 本来のイベントを上書き ( オーバーライド ) する場合 下記の様に 本来のイベントを呼び出して置かないと 標準の OnTextChange イベントが発生しない イベントを総て書き換えるのなら必要は無いが 機能を追加する場合は 元のイベントを呼び出して置く必要が有る ' 本来のイベントの呼出 MyBase.OnTextChanged(e) // 本来のイベントの呼出 base.ontextchanged(e); イベントの subscribe( 登録側 ) 扨て 次は此の新しい TextBox を使用するコードで有る 前出のコードで未実装で有ったフォームクラスに下記のコードを記述する -22-

23 Private Tx As TextBoxEx ' フォームが読み込まれた時の処理 Private Sub EventTextbox_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load ' 拡張テキストボックスのインスタンス生成 Tx = New TextBoxEx() With Tx.Size = New Size(270, 250).Location = New Point(10, 10).Multiline = True End With Me.Controls.Add(Tx) ' イベントハンドラの追加 AddHandler Tx.TextNewLine, AddressOf Tx_NewLine ' 拡張テキストボックスで TextNewLine イベントが発生した時の処理 Private Sub Tx_NewLine(ByVal sender As Object, ByVal e As EventArgs) ' 拡張テキストボックスのテキスト取得 Dim S As String = Tx.Text ' を挿入 Tx.Text = S.Substring(0, S.Length - 2) & " " & vbcrlf ' キャレットの末尾移動 Tx.SelectionStart = Tx.Text.Length private TextBoxEx tx; // フォームが読み込まれた時の処理 private void EventTextbox_Load(object sender, EventArgs e) // 拡張テキストボックスのインスタンス生成 tx = new TextBoxEx(); tx.size = new Size(270, 250); tx.location = new Point(10, 10); tx.multiline = true; this.controls.add(tx); // イベントハンドラの追加 tx.textnewline += new TextBoxEx.DelegateNewLine(tx_NewLine); -23-

24 // 拡張テキストボックスで TextNewLine イベントが発生した時の処理 private void tx_newline(object sender, EventArgs e) // 拡張テキストボックスのテキスト取得 string s = tx.text; // を挿入 tx.text = s.substring(0, s.length - 2) + " r n"; // キャレットの末尾移動 tx.selectionstart = tx.text.length; 新しい TextBox は 総てコードで作成して居る Visual Studio のバージョンに依っては TextBoxEx クラスを作成して一度ビルトすると ツールボックスの中に TextBoxEx が表示される物も有り 其の場合は 其のコントロールを Form の上に配置すれば良い事に成る 因みに の場合 Tx.TextNewLine += new TextBoxEx.DelegateNewLine(tx_NewLine); でイベントハンドラを追加しない場合 此のイベントを拾う事が出来ず オブジェクト参照がオブジェクトインスタンスに設定されて居ません と謂うランタイムエラーが発生する 此れを避ける為に 拡張テキストボックスの OnTextChanged イベントの上書き ( オーバーライド ) に於いて インスタンスが作成されて居なければ イベントを起こさない為 下記の様に記述する事が望ましい 猶 2005 では 言語仕様の違いで エラーには成らない ( と では 微妙にコードの仕様が異なる ) // インスタンスが有る場合而巳イベントを発生 if (TextNewLine!= null) TextNewLine(this, e); 言語仕様の違いは他にも有る の場合 event キーワードを使用せずに 下記の様に記述しても正常に動作する の場合 event は デリゲートの特殊形なので有ろう // デリゲートでイベントを宣言する public DelegateNewLine TextNewline; イベントとは イベントは 其の記述法から仕ても デリゲートのリストを保持するクラス内のフィールドで有ると謂える リストに加える為には では AddHandler では += 演算子を使用する AddHandler Tx.TextNewLine, AddressOf mytx_newline tx.textnewline += tx_newline; リスト登録されたデリゲートは 登録順に実行される事に成る 亦 削除は では RemoveHandler では -= 演算子を使用する -24-

25 インターフェースの基本 インターフェースとは 最近のコンピュータには 必ず USB のコネクタが付いて居る USB のコネクタには様々な周辺機器が接続される メモリやプリンタは勿論の事 扇風機や膝掛け迄有る 此の様な周辺機器は USB の仕様書に基づいて作られて居る 仕様書の中で他の機器との接続部分をインターフェースと呼ぶ事が有る USB の仕様書のインターフェス部分には何の様なコネクタを使用するのか コネクタの何番ピンに何ボルトの電源が接続して居る等の情報が書かれて居る.NET Framework のインターフェースも此れに似て居る Sort メソドを使ったインターフェースの説明 Array クラスは Sort と謂うメソドを持って居る 此れを使用したコンソールコードを 下記に示す Sub Main() Dim Ar() As Integer = 1, 7, 4 Array.Sort(Ar) For I As Integer = 0 To (Ar.Length - 1) Console.WriteLine(Ar(I).ToString()) Next Console.Read() static void Main(string[] args) int[] ar = 1, 7, 4 ; Array.Sort(ar); for (int i = 0; i < ar.length; i++) Console.WriteLine(ar[i].ToString()); Console.Read(); 実行結果は と表示される 此の Sort と謂うメソドは Array クラスに格納されて居るデータを或る規則に従って並べ替える 例えば Array クラスに文字列が格納されて居る場合は Sort メソドを実行すると 文字は大文字小文字を無視して Ascii コード順にソートされる 亦 Array クラスに数値が格納されて居る場合は 数値の小さい順にソートされる 其れでは 文字列を大文字小文字を区別してソートするには何の様にするのだろうか 亦 数値を降順にソートするには何の様にするのだろうか 更に 自分の好きな様にソートし度いと考えるかも知れない -25-

26 此の様な色々なソートを実現する為には ソートの方法を 其の使用者に任せて了えば良いので有る ソートは 本来 2 個の値を比較して 小さい方を前に 大きい方を後ろに設定する 詰まり ソートとは 2 個の値の比較と再配置の繰り返しで有る 其処で 此の比較の方法を Sort の使用者に開放して了えば良い事に成る インターフェースの定義 其れでは String クラス 又は Integer クラスが持つ Sort メソドの 2 個の値の比較メソドを書き換えるには 何の様な事をすれば良いのだろうか 此の方法を提供するのがインターフェースで インターフェースは 下記の様に記述される ( 実際は 此のコードは コモンランタイムモジュール (CLR) の中に書かれて居り 此の通りではないかも知れない ) Public Interface IComparable Public Function CompareTo(ByVal x As Object) As Integer End Interface interface IComparable int CompareTo(object x); 此れは Icomparable インターフェースは ComparareTo メソドを持ち 此の CompareTo メソドは 1 個の object 型の引数を持ち Integer の値を返すと謂う意味で有る 然して 此の CompareTo メソドが大小比較の為のメソドと成る 併し乍 CompareTo メソドが一体何をするかは全く記述されて居ない ( 実装が為されて居ない ) 其れは 使用者が自由に記述する ( 実装する ) と謂う事なので有る インターフェースの名前は自由だが 慣例として 先頭に大文字の I を付ける事に成って居る インターフェースを持つクラスの記述 扨て 此のインターフェースを持つクラスは 下記の様に記述する Public Class Compare Implements IComparable ' 実装 End Class class Compare : IComparable // 実装 -26-

27 の場合 Implements ステートメントでインターフェース名を指定し の場合 クラス名の後ろに続けてコロン ( : ) とインターフェース名を記述する 猶 クラスの継承とは異なり インターフェースは ピリオド (, ) で区切り 幾つでも指定する事が出来る ( 此れを インターフェースを実装すると謂う ) 此処で重要なルールが有る インターフェースを実装した場合は 必ず 其のインターフェースが規定するメソド ( 此の場合は CompareTo) を実装する必要が有る 若し 実装を忘れると コンパイラーがエラーを報告する インターフェースのメソド実装 実際に 此のクラス (InterfaceSort) に CompareTo メソドを実装して観る事にする Sort メソドが呼び出す ComareTo は 引数と自分を比較して 自分が小さければ負の値を 同じならば 0 を 自分が大きければ正の値を返す 亦 Sort メソドは ComareTo を呼び出して 負の値が返れば 自分を前に 同じなら何もせずに 正の値が返れば 自分を後ろにする InterfaceSort クラスに実装する CompareTo メソドは 其の事を念頭に入れて実装する事にする ' インターフェースを実装するクラス Public Class Compare Implements IComparable ' 内部変数 Public Value As Integer ' コンストラクタ ( 最初に値をセット ) Public Sub New(ByVal X As Integer) Value = X ' インターフェース IComparable で定義されて居るメソッド ( 要実装 ) Public Function CompareTo(ByVal Obj As Object) As Integer _ Implements System.IComparable.CompareTo Dim NewValue As Integer = DirectCast(Obj, Compare).Value Return (Value - NewValue) End Function End Class // インターフェースを実装するクラス public class Compare : IComparable // 内部変数 public int value; // コンストラクタ ( 最初に値をセット ) public Compare(int x) -27-

28 value = x; // CompareTo の実装 public int CompareTo(object obj) int newvalue = ((Compare)obj).value; return (value - newvalue); Compare クラスは 内部に Integer 型のフィールド Value を持つ 此の Value は 此のクラスのインスタンスが作成される時に コンストラクタの引数として設定される 変数名は 慣例に従い では 大文字から始まり では 総て小文字で命名して居る ComapreTo メソドは 引数に Object 型の値を取り 此の Object 型の値と現在の設定値 詰り Value を比較する Dim NewValue As Integer = DirectCast(Obj, Compare).Value( では int newvalue = ((Compare)obj).value;) は 渡された Object 型の値から比較される Integer 型の値を抽出して居る 亦 戻り値に Value NewValue を設定する事で 現在の設定値が引数で与えられた比較値より大きい場合は正の値 小さい場合は負の値 等しい場合は 0 を返す事に成る 猶 Sort に関しては今少し簡単な方法が有り 此れは後述するが 此処で重要なのは ソートの比較方法は IComparable インターフェースの ComapreTo メソドの比較方法に拠ると謂う事を理解する事で有る IConparable インターフェースを持つクラスを使用したソート例 其れでは IConparable インターフェースを実装した Compare クラスを使用して Sort のコードを書き換えて観る事にする Public Class InterfaceSort ' ボタン (SORT) がクリックされた時の処理 Private Sub btnsort_click(byval sender As System.Object, ByVal e As System.EventArgs) _ Handles btnsort.click Dim Ar(2) As Compare Ar(0) = New Compare(1) Ar(1) = New Compare(7) Ar(2) = New Compare(4) Array.Sort(Ar) lstresult.items.clear() For I As Integer = 0 To (Ar.Length - 1) -28-

29 lstresult.items.add(ar(i).value) Next End Class ' インターフェースを実装するクラス Public Class Compare Implements IComparable ' 内部変数 Public Value As Integer ' コンストラクタ ( 最初に値をセット ) Public Sub New(ByVal X As Integer) Value = X ' インターフェース IComparable で定義されて居るメソッド ( 要実装 ) Public Function CompareTo(ByVal obj As Object) As Integer _ Implements System.IComparable.CompareTo Dim NewValue As Integer = DirectCast(obj, Compare).Value Return (Value - NewValue) End Function End Class using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace InterfaceSort public partial class InterfaceSort : Form public InterfaceSort() InitializeComponent(); // ボタン (SORT) がクリックされた時の処理 private void btnsort_click(object sender, EventArgs e) Compare[] ar = new Compare[3]; ar[0] = new Compare(1); -29-

30 ar[1] = new Compare(7); ar[2] = new Compare(4); Array.Sort(ar); lstresult.items.clear(); for (int i = 0; i < ar.length; i++) lstresult.items.add(ar[i].value.tostring()); // インターフェースを実装するクラス public class Compare : IComparable // 内部変数 public int value; // コンストラクタ ( 最初に値をセット ) public Compare(int x) value = x; // CompareTo の実装 public int CompareTo(object obj) int newvalue = ((Compare)obj).value; return (value - newvalue); 結果は前出のコードと同じ と表示される 其れでは 今度は Compare クラスの Value NewValue を NewValue Value と書き換えて観る 実行結果は 7,4,1 と成る 詰まり 引数と現在値の大小比較を書き換えれば 好きな様にソートが出来ると謂う事で有る 例えば 4 を必ず先頭に来る様にソートする場合は CompareTo を下記の様に書き換えれば良い事に成り 実行結果は と成る ' CompareTo の実装 Public Function CompareTo(ByVal obj As Object) As Integer _ Implements System.IComparable.CompareTo Dim NewValue As Integer = DirectCast(obj, Compare).Value If Value = 4 Then Return 1 ElseIf NewValue = 4 Then Return 1-30-

31 Else Return (Value - NewValue) End If End Function // CompareTo の実装 public int CompareTo(object obj) int newvalue = ((Compare)obj).value; if (value == 4) return -1; else if (newvalue == 4) return 1; else return (newvalue-value); Integer クラスも String クラスも IComparable クラスを実装して居る 扨て 此処で 今一度 最初のコードを観て欲しい Integer 型の 1 次元配列 Ar を Array.Sort(Ar) でソートを行なって居る Integer クラスは 元々 IComparable インターフェースを実装して居り 当然 CompareTo メソドを実装して居る Sort メソドは 其れを使用してソートを行なって居るので有る Array クラスの持つインターフェース Array クラスの Sort メソドには 幾つかのオーバーライドが有り 様々な引数が設定出来るが 此処では Array クラスを引数に持つ物と Array クラスと IComparer を引数に持つ物を表示して居る 名前 1 Array.Sort (Array) 2 Array.Sort (Array, IComparer) 説明 Array の各要素に依って実装された IComparable を使用して 1 次元 Array 全体の要素を並べ替える 1 次元 Array 内の要素を 指定した IComparer を使用して並べ替える 1 番目の方法は既に説明済みで 引数に現在値と比べる Object を渡した物で有る 比較は IComparable インターフェースの compareto メソドが使用されて居る 此の方法は 比べる現在値をクラスの中で保持する必要が有り 数値や文字列の比較には面倒で有る インターフェース IComparer の使用 2 番目の方法は 引数にソートする Array とインターフェースの IComparer を指定する方法で有る IComparer インターフェースの Compare メソドは 2 個の Object の引数を取り Integer の値を返す 下記のコードは Compare2 と謂うクラスを宣言し CLR が持つ IComparer インターフェスを実装させて居る Compare メソドは 比べる対象を Intger 型の引数に限定して 初めの引数が小さければ負の値を 大きければ正の値を 等しいなら 0 を返す -31-

32 Public Class InterfaceSort ' ボタン (SORT) がクリックされた時の処理 Private Sub btnsort_click(byval sender As System.Object, ByVal e As System.EventArgs) _ Handles btnsort.click Dim Ar() As Integer = 1, 7, 4 Array.Sort(Ar, New Compare2()) lstresult.items.clear() For I As Integer = 0 To (Ar.Length - 1) lstresult.items.add(ar(i)) Next End Class ' インターフェースを実装するクラス Public Class Compare2 Implements IComparer ' インターフェース IComparer で定義されて居るメソッド ( 要実装 ) Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer _ Implements System.Collections.IComparer.Compare Return (Integer.Parse(x) - Integer.Parse(y)) End Function End Class using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Collections; namespace InterfaceSort public partial class InterfaceSort : Form public InterfaceSort() InitializeComponent(); // ボタン (SORT) がクリックされた時の処理 private void btnsort_click(object sender, EventArgs e) -32-

33 int[] ar = 1, 7, 4 ; Array.Sort(ar, new Compare2()); lstresult.items.clear(); for (int i = 0; i < ar.length; i++) lstresult.items.add(ar[i].tostring()); // インターフェースを実装するクラス public class Compare2 : IComparer public int Compare(object x, object y) return ((int)x - (int)y); ソートの方法は Return (Integer.Parse(x) - Integer.Parse(y))( では return ((int)x-(int)y);) の部分を書き換える事に依り 自由に決める事が出来る 第 1 項と第 2 項を入れ替える事で ソートが降順に成る事を確かめて欲しい 此の方法の方が IComparable インターフェースの CompareTo メソドを使用するよりコードが直感的で簡単に成る 以上 此処では インターフェースを.NET Framework が持つ IComparable インターフェースと IComparer インターフェースを使用して説明したが インターフェースは自由に設定出来る 亦 インターフェースは メソド丈ではなく プロパティやインデクサを設定する事も可能で有る 本稿は 下記のサイトの記事を元に 手を加えた物で有る 下記のサイトは 他にも色々有用な情報が有る 1 羊の皮を着た狼 VB.NET 2 Form1 Form2 の相互参照 3 Form1 Form2 の相互参照 2 4 VB.NET データ型の基本 5 VB.NET 文字列 6 VB.NET タイマー精度 7 BackgroundWorker の魅力 BackgroundWorker の魅力 VB6 のタイマー 10 コントロールの配列をインデクサ.. 11 コントロールの配列はジェネリク.. 12 インデクサ ( VB.NET) -33-

34 13 インデクサでBit 操作 14 Unicode 入門 15 デリゲート入門 16 マルチスレッド入門 17 イベント入門 18 デリゲートとイベント 18 インターフェースの基本 RichTextBox 関係 1 RichTextBox の不思議 2 テキスト色付け高速化計画 3 VB.NET RichTextBox1 4 VB.NET RichTextBox 2 RS-232C 関係 1 RS-232C の基礎 2 RS-232C の何が変わった.. 3 SerialPort クラス 4 Unicode( ユニコード ) の壁 5 マルチスレッドの壁 6 RS-232C サンプルコード 7 RS-232C の HEX モニタ 8 RS-232C 送信モジュール 9 RS-232C のループテスト 10 RS-232C のピンチェンジ.. Socket 通信 1 VB2005 で Socket 通信 2 サーバー複数接続 -34-

ICONファイルフォーマット

ICONファイルフォーマット グラフィックス 画像フォーマットエンコーダパラメータ 様々なフォーマットで画像を保存 Bitmap クラスを用いる事でビットマップ JPEG GIF PNG 等様々なフォーマットの画像を読み込み操作する事が出来る 更に Bitmap クラスや Graphics コンテナを用いて描画処理等を施したイメージをファイルに保存する事も出来る 此の時 読み込めるフォーマット同様に保存するフォーマットを選択する事が出来る

More information

プロセス間通信

プロセス間通信 プロセス間通信 プロセス間通信 (SendMessage) プロセス間通信とは 同一コンピューター上で起動して居るアプリケーション間でデータを受け渡し度い事は時々有る Framework には リモート処理 と謂う方法でデータの受け渡しを行なう方法が有る 此処では 此の方法では無く 従来の方法の API を使用したプロセス間通信を紹介する 此の方法は 送信側は API の SendMessage で送り

More information

VB 資料 電脳梁山泊烏賊塾 音声認識 System.Speech の利用 System.Speech に依るディクテーション ( 音声を文字列化 ).NetFramework3.0 以上 (Visual Studio 2010 以降 ) では 標準で System.Speech が用意されて居るの

VB 資料 電脳梁山泊烏賊塾 音声認識 System.Speech の利用 System.Speech に依るディクテーション ( 音声を文字列化 ).NetFramework3.0 以上 (Visual Studio 2010 以降 ) では 標準で System.Speech が用意されて居るの 音声認識 System.Speech の利用 System.Speech に依るディクテーション ( 音声を文字列化 ).NetFramework3.0 以上 (Visual Studio 2010 以降 ) では 標準で System.Speech が用意されて居るので 此れを利用して音声認識を行うサンプルを紹介する 下記の様な Windows フォームアプリケーションを作成する エディタを起動すると

More information

スレッド操作 タイマー

スレッド操作 タイマー スレッド操作 タイマー System.Windows.Forms.Timer Windows フォームの Timer は 一定の間隔でイベントを発生させるコンポーネントで有る 此のコンポーネントは Windows フォーム環境で使用する サーバー環境に適したタイマが必要な場合は 後述の System.Timers.Timer を使用する イベントの発生する間隔は ミリ秒単位で Interval プロパティで設定しする

More information

ファイル操作

ファイル操作 ファイル操作 TextFieldParser オブジェクト ストリームの読込と書込 Microsoft.VisualBasic.FileIO 名前空間の TextFieldParser オブジェクトは 構造化テキストファイルの解析に使用するメソッドとプロパティを備えたオブジェクトで有る テキストファイルを TextFieldParser で解析するのは テキストファイルを反復処理するのと同じで有り

More information

ファイル監視

ファイル監視 ファイル操作 ファイルやディレクトリの監視 FileSystemWatcher クラス.NET Framework のクラスライブラリには ファイルやディレクトリの作成 変更 削除を監視する為の FileSystemWatcher クラスが System.IO 名前空間に用意されて居る ( 但し Windows 98/Me では利用出来ない ) 此れを利用すると 特定のディレクトリにファイルが作成された

More information

NotifyIconコントロール

NotifyIconコントロール NotifyIcon コントロール システムトレイ ( タスクトレイ ) にアイコンを表示する.NET Framework 2.0 以降の場合は 後述の 2 を観て欲しい Outlook や MSN Messenger 等の様に Windows アプリケーションではシステムトレイ ( タスクトレイ ステータス領域等とも呼ばれる ) にアイコンを表示して アプリケーションの状態を示したり アプリケーションのフォームを表示したりする為のショートカットとして利用する事が出来る.NET

More information

プラグイン

プラグイン プラグイン プラグイン詳細 2 ~ プラグイン機能を持つテキストエディタの作成 ~ はじめに Adobe Photoshop や Becky! Internet Mail 等のアプリケーションでは プラグイン ( 又は アドイン エクステンション 等 ) と呼ばれるプログラムをインストールする事に依り 機能を拡張する事が出来る 此の記事では此の様なプラグイン機能を持ったアプリケーションの作り方を プラグイン対応のテキストエディタを作成する事に依り

More information

データアダプタ概要

データアダプタ概要 データベース TableAdapter クエリを実行する方法 TableAdapter クエリは アプリケーションがデータベースに対して実行出来る SQL ステートメントやストアドプロシージャで TableAdapter で型指定されたメソッドと仕て公開される TableAdapter クエリは 所有るオブジェクトのメソッドと同様に 関連付けられたメソッドを呼び出す事に依り実行出来る TableAdapter

More information

C#の基本

C#の基本 C# の基本 ~ 開発環境の使い方 ~ C# とは プログラミング言語のひとつであり C C++ Java 等に並ぶ代表的な言語の一つである 容易に GUI( グラフィックやボタンとの連携ができる ) プログラミングが可能である メモリ管理等の煩雑な操作が必要なく 比較的初心者向きの言語である C# の利点 C C++ に比べて メモリ管理が必要ない GUIが作りやすい Javaに比べて コードの制限が少ない

More information

Visual Basic 資料 電脳梁山泊烏賊塾 コレクション初期化子 コレクション初期化子 初めに.NET 版の Visual Basic では 其れ迄の Visual Basic 6.0 とは異なり 下記の例の様に変数宣言の構文に 初期値を代入する式が書ける様に成った 其の際 1 の様に単一の値

Visual Basic 資料 電脳梁山泊烏賊塾 コレクション初期化子 コレクション初期化子 初めに.NET 版の Visual Basic では 其れ迄の Visual Basic 6.0 とは異なり 下記の例の様に変数宣言の構文に 初期値を代入する式が書ける様に成った 其の際 1 の様に単一の値 コレクション初期化子 コレクション初期化子 初めに.NET 版の Visual Basic では 其れ迄の Visual Basic 6.0 とは異なり 下記の例の様に変数宣言の構文に 初期値を代入する式が書ける様に成った 其の際 1 の様に単一の値 ( 此処では 10) を代入する丈でなく 2 の配列変数の宣言の様に ブレース { } の中にカンマ区切りで初期値のリストを記述し 配列の各要素に初期値を代入出来る様に成った

More information

ウィンドウ操作 応用

ウィンドウ操作 応用 Win32API 関数 ウィンドウ操作 ウィンドウ名でトップレベルウィンドウ ( 親を持たないウィンドウ ) のハンドルを取得 メモ帳や電卓等のウィンドウ名でトップレベルウィンドウ ( 親を持たないウィンドウ ) のハンドルを取得する方法を 下記に示す Visual Basic Imports System.Runtime.InteropServices Public Class WindowFromWindowName

More information

正規表現応用

正規表現応用 正規表現 正規表現を使って文字列が或る形式と一致するか調べる 指定された正規表現のパターンと一致する対象が入力文字列内で見付かるか何うかを調べるには Regex クラスの IsMatch メソッドを使用する 此処では IsMatch メソッドを使った例を幾つか紹介する 猶 正規表現のパターンと一致する個所を探し 見付かれば 其の箇所を抽出する方法は 正規表現を使って文字列を検索し 抽出する で紹介して居る

More information

グラフィックス

グラフィックス グラフィックス PictureBox の Image プロパティに関する良く有る勘違い PictureBox に画像を表示する方法と仕て PictureBox の Image プロパティを使う方法と Graphics の DrawImage メソッドを使う方法が有るが 此の 2 つの方法を混同し 正しく理解して居ない事が多い様で有る 例えば 下記に列挙する様な状況が 此れに該当する 1.PictureBox

More information

ファイル操作-バイナリファイル

ファイル操作-バイナリファイル ファイル操作 バイナリ ファイルを読み書きする バイナリファイル ( 即ちテキストファイル以外のファイル ) を読み書きするには FileStream クラス (System.IO 名前空間 ) を利用する FileStream クラスはファイル用のストリームをサポートするクラスで有り Stream クラス (System.IO 名前空間 ) の派生クラスの 1 つで有る 基本的には コンストラクタで指定したファイルのストリームに対して

More information

Prog2_12th

Prog2_12th 2018 年 12 月 13 日 ( 木 ) 実施クラスの継承オブジェクト指向プログラミングの基本的な属性として, 親クラスのメンバを再利用, 拡張, または変更する子クラスを定義することが出来る メンバの再利用を継承と呼び, 継承元となるクラスを基底クラスと呼ぶ また, 基底クラスのメンバを継承するクラスを, 派生クラスと呼ぶ なお, メンバの中でコンストラクタは継承されない C# 言語では,Java

More information

ハッシュテーブル

ハッシュテーブル ハッシュテーブル ハッシュテーブル ( 連想配列 ) を使う ハッシュテーブルとは キー (key) と値 (value) のペアを保持して居るコレクションで有る 通常の配列がインデックス番号に依り各値 ( 各要素 ) にアクセス出来るのに比べて ハッシュテーブルでは インデックス番号の代わりにキーを用いて 其の各値にアクセスする事が出来る キーと 其のキーから連想される ( 対応付けられて居る )

More information

Userコントロール

Userコントロール User コントロール 初めてのユーザーコントロールの作成 作成したクラスは他のプログラムで再利用出来る為 同じコードを何度も繰り返し作成する必要が無い コントロールも 複数のプロジェクトで再利用出来るクラスで有る 同じユーザーインターフェイスを何度も繰り返してデザインすると謂う経験は 恐らく誰でも有る 例えば 姓と名を入力する為の TextBox コントロールを追加した後で 両方を組み合わせてフルネームを作成するコードを追加する等の作業で有る

More information

VB.NET解説

VB.NET解説 Visual Basic.NET 印刷編 目次 印刷の概要... 2 印刷の流れ... 2 標準の Windows フォーム印刷ジョブの作成... 3 実行時に於ける Windows フォーム印刷オプションの変更... 3 Windows フォームに於ける接続されたプリンタの選択... 4 Windows フォームでのグラフィックスの印刷... 5 Windows フォームでのテキストの印刷...

More information

LogisticaTRUCKServer-Ⅱ距離計算サーバ/Active-Xコントロール/クライアント 概略   

LogisticaTRUCKServer-Ⅱ距離計算サーバ/Active-Xコントロール/クライアント 概略       - LogisticaTRUCKServer-Ⅱ(SQLServer 版 ) 距離計算サーハ API.NET DLL WindowsForm サンフ ルフ ロク ラム - 1 - LogisticaTRUCKServer-Ⅱ 距離計算サーハ.NET DLL WindowsForm VisualBasic での利用方法 LogisticaTRUCKServer-Ⅱ 距離計算.NET DLLのサンプルプログラムの参照サンフ

More information

ファイル操作-インターネットキャッシュ

ファイル操作-インターネットキャッシュ ファイル操作 インターネット一時ファイルの保存場所 インターネットキャッシュ インターネット一時ファイルの保存場所は Internet Explorer の場合 下記の手順で確認する事が出来る 1.[ ツール ] [ インターネットオプション ] でインターネットオプション画面のダイアログを表示させる 2.[ 全般 ] タブで [ インターネット一時ファイル ] グループの [ 設定 ] をクリックすると

More information

ListViewコントロール

ListViewコントロール ListView コントロール ListView コントロールへ項目を追加 本稿では.NET Framework の標準コントロールで有る ListView コントロール (System.Windows.Forms 名前空間 ) を活用する為に ListView コントロールにデータを追加する方法を紹介する ListView コントロールは データ項目をアイコン表示や詳細表示等に依り一覧表示する為の物で

More information

C#の基本2 ~プログラムの制御構造~

C#の基本2 ~プログラムの制御構造~ C# の基本 2 ~ プログラムの制御構造 ~ 今回学ぶ事 プログラムの制御構造としての単岐選択処理 (If 文 ) 前判定繰り返し処理(for 文 ) について説明を行う また 整数型 (int 型 ) 等の組み込み型や配列型についても解説を行う 今回作るプログラム 入れた文字の平均 分散 標準偏差を表示するプログラム このプログラムでは calc ボタンを押すと計算を行う (value は整数に限る

More information

.NETプログラマー早期育成ドリル ~VB編 付録 文法早見表~

.NETプログラマー早期育成ドリル ~VB編 付録 文法早見表~ .NET プログラマー早期育成ドリル VB 編 付録文法早見表 本資料は UUM01W:.NET プログラマー早期育成ドリル VB 編コードリーディング もしくは UUM02W:.NET プログラマー早期育成ドリル VB 編コードライティング を ご購入頂いた方にのみ提供される資料です 資料内容の転載はご遠慮下さい VB プログラミング文法早見表 < 基本文法 > 名前空間の定義 Namespace

More information

ブロック崩し風テニス

ブロック崩し風テニス ぱっくんフィッシング VB 2005 13 プログラムの概要 パーティゲームとして良く知られた釣りゲームです マウスで釣り糸を操作して 開閉する魚の口に餌を垂らし 魚が餌を咥えると 釣り上げ 籠の中に入れます 直ぐに口を開けて 海に逃れる魚 中々餌を離さず 籠に入らない魚と 色々なバリエーションが楽しめます 一般的に 実用プログラムに比較するとゲームプログラムは 高度なテクニックを要求される事が多い

More information

プログラミング基礎I(再)

プログラミング基礎I(再) 山元進 クラスとは クラスの宣言 オブジェクトの作成 クラスのメンバー フィールド 変数 配列 メソッド メソッドとは メソッドの引数 戻り値 変数の型を拡張したもの 例えば車のデータベース 車のメーカー 車種 登録番号などのデータ データベースの操作 ( 新規データのボタンなど ) プログラムで使う部品の仕様書 そのクラスのオブジェクトを作ると初めて部品になる 継承 などの仕組みにより カスタマイズが安全

More information

スライド 1

スライド 1 C# の基本 ~ ファイル読み込み ~ 今回学ぶ事 今回はファイル読み書きに必要 BinaryReader クラスについて記載する ファイル参照ダイアログである OpenFileDialog クラスについても理解を深める また Bitmap クラスを用いた Bitmap ファイルの読み込み方法についても学ぶ フォーム作り まず label picturebox を配置する ツールボックスより左クリックで選択する

More information

ルーレットプログラム

ルーレットプログラム ルーレットプログラム VB 2005 4 プログラムの概要 カジノの代表的なゲーム ルーレット を作成する 先ず GO! ボタンをクリックすると ルーレット盤上をボールが回転し 一定時間経過すると ボールが止まり 出目を表示するプログラムを作成する 出目を 1~16 大小 偶数奇数の内から予想して 予め設定した持ち点の範囲内で賭け点を決め 賭け点と出目に依り 1 点賭けの場合は 16 倍 其他は 2

More information

PYTHON 資料 電脳梁山泊烏賊塾 PYTHON 入門 関数とメソッド 関数とメソッド Python には関数 (function) とメソッド (method) が有る モジュール内に def で定義されて居る物が関数 クラス内に def で定義されて居る物がメソッドに成る ( 正確にはクラスが

PYTHON 資料 電脳梁山泊烏賊塾 PYTHON 入門 関数とメソッド 関数とメソッド Python には関数 (function) とメソッド (method) が有る モジュール内に def で定義されて居る物が関数 クラス内に def で定義されて居る物がメソッドに成る ( 正確にはクラスが PYTHON 入門 関数とメソッド 関数とメソッド Python には関数 (function) とメソッド (method) が有る モジュール内に def で定義されて居る物が関数 クラス内に def で定義されて居る物がメソッドに成る ( 正確にはクラスがインスタンス化されてからメソッドに成る ) # 関数 def test_func(): print('call test_func') #

More information

ブロック パニック

ブロック パニック ブロックパニック VB 2005 9 プログラムの概要 壁が迫り来る不思議な空間のオリジナルゲーム ブロックパニック を作成する スタートボタンをクリックし上下左右の矢印キーで白猿を移動させる スペースキーを押すと 向いて居る方向の壁が後退する 左右の壁が合わさると ゲームは終了する 一般的に 実用プログラムに比較するとゲームプログラムは 高度なテクニックを要求される事が多い 此処では ゲームプログラムを作成する事に依り

More information

構造体

構造体 構造体 Byte 配列 構造体とコピーする方法 構造体とバイト配列の変換を行うには System.Runtime.InteropServices 名前空間をインポートして置くと便利で有る Imports System.Runtime.InteropServices using System.Runtime.InteropServices; 下記の 3 種類の構造体にバイト配列の値を格納した場合に付いて検証する

More information

DAOの利用

DAOの利用 DAO VB2005 で DAO を使用して Excel のデータを取得 Visual Basic 6.0 Dim DB As DAO.Database Dim RS As DAO.Recordset Dim xlfilename As String Dim xlsheetname As String xlfilename = Form1.StatusBar1.Panels(12) & Dir(Form1.StatusBar1.Panels(12)

More information

Microsoft PowerPoint - prog03.ppt

Microsoft PowerPoint - prog03.ppt プログラミング言語 3 第 03 回 (2007 年 10 月 08 日 ) 1 今日の配布物 片面の用紙 1 枚 今日の課題が書かれています 本日の出欠を兼ねています 2/33 今日やること http://www.tnlab.ice.uec.ac.jp/~s-okubo/class/java06/ にアクセスすると 教材があります 2007 年 10 月 08 日分と書いてある部分が 本日の教材です

More information

64bit環境で32bitコンポーネントの利用

64bit環境で32bitコンポーネントの利用 64bit 環境 64bit 環境で 32bit コンポーネントの利用 Windows 7 や 8 の出現で 愈々 64bit 環境も普及し始めて来た 64bit 環境に於いては 64bit 用に最適化された 64bit コンポーネントを使用するのが本筋で有ろうが 64bit 環境に於いても 32bit コンポーネントを使用し度い場合が有る 過去の遺物 ( レガシ ) と仕て切り捨てるのではなく 良い物は良い物と仕て有効利用すると謂う観点から

More information

データベースプログラミング

データベースプログラミング データセットとデータテーブル データセット (DataSet) とは何かに付いて 簡単に説明する データセットとは 典型的な.NET の Windows データベースアプリケーションでは データセットを通じてアプリケーションからデータベースにアクセスする データセットとは 簡単に謂うと データベースから取得したレコードをメモリ上に持つ為の入れ物で有る 例えば データベースからレコードを取得し 其れをグリッドコントロールに表示する様な

More information

Prog2_15th

Prog2_15th 2019 年 7 月 25 日 ( 木 ) 実施メニューメニューバーとコンテクストメニュー Visual C# では, メニューはコントロールの一つとして扱われ, フォームアプリケーションの上部に配置されるメニューバーと, コントロール上でマウスを右クリックすると表示されるコンテクストメニューとに対応している これ等は選択するとメニューアイテムのリストが表示されるプルダウンメニューと呼ばれる形式に従う

More information

LogisticaTRUCKServer-Ⅱ距離計算サーバ/Active-Xコントロール/クライアント 概略   

LogisticaTRUCKServer-Ⅱ距離計算サーバ/Active-Xコントロール/クライアント 概略       - LogisticaTRUCKServer-Ⅱ(SQLServer 版 ) 距離計算サーハ API.NET DLL WebForms ASP.NET サンフ ルフ ロク ラム - 1 - LogisticaTRUCKServer-Ⅱ 距離計算サーハ.NET DLL WebForm ASP.NET VisualBasic での利用方法 LogisticaTRUCKServer-Ⅱ 距離計算.NET

More information

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード]

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード] 第 3 回 Java 基本技術講義 クラス構造と生成 33 クラスの概念 前回の基本文法でも少し出てきたが, オブジェクト指向プログラミングは という概念をうまく活用した手法である. C 言語で言う関数に似ている オブジェクト指向プログラミングはこれら状態と振る舞いを持つオブジェクトの概念をソフトウェア開発の中に適用し 様々な機能を実現する クラス= = いろんなプログラムで使いまわせる 34 クラスの概念

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション オブジェクト指向 プログラミング演習 第 4 回継承 オーバーライド ポリモルフィズム 今日のお題 継承 オーバーライド ポリモルフィズム 継承 (inherit) あるクラス c のサブクラス s を定義する : このとき s は c を継承していると言う 何かの下位概念を表すクラスは その上位概念を表すクラスの属性や機能を ( 基本的には ) 使える 継承の例 大学生 長崎県立大学の学生 大学生を継承する概念

More information

Microsoft Excel操作

Microsoft Excel操作 Microsoft Excel 操作 Excel ファイルにアクセス リフレクションを利用したレイトバインディングで Excel ファイルを操作 Visual Basic なら CreatObject 関数を使用して 暗黙の遅延バインディングを利用する事に依り 簡単にに実現出来る Excel の操作も C# で実現するには 少し面倒臭い事に成る 事前バインディングでも実装する事も出来るが 事前バインディングだと

More information

Microsoft PowerPoint ppt

Microsoft PowerPoint ppt 独習 Java ( 第 3 版 ) 6.7 変数の修飾子 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 Object クラスと Class クラス 6.7 変数の修飾子 (1/3) 変数宣言の直前に指定できる修飾子 全部で 7 種類ある キーワード final private protected public static transient volatile 意味定数として使える変数同じクラスのコードからしかアクセスできない変数サブクラスまたは同じパッケージ内のコードからしかアクセスできない変数他のクラスからアクセスできる変数インスタンス変数ではない変数クラスの永続的な状態の一部ではない変数不意に値が変更されることがある変数

More information

モグラ叩きプログラム

モグラ叩きプログラム プログラミングの有用性 VB 2005 1 醒めよ!! 遣り度い事を遣るには 先ず 遣らなければ成らない事を遣る! 現に 其の事に気付いて 日々 其の 遣らなければ成らない事 に邁進して居る人間が 居る 寧ろ 其れを愉しんでさえ居る者も居る 然して 着実に 世の中が必要とする技 術を身に付けて行って居る者が居る 併し 何が 遣らなければ成らない事 なのか解らない場合は 現実に対応出来る技術力 を持ち

More information

グラフィックトレーニング 概要.NET のグラフィック描画は どんなことができるのでしょうか? グラフィックオブジェクトやグラフィック環境 概念を理解するためには クラスを使って馴れることが近道です 本 書に記載されているコードをカットアンドペーストして 一つ一つの機能を体験してください 前提 グラ

グラフィックトレーニング 概要.NET のグラフィック描画は どんなことができるのでしょうか? グラフィックオブジェクトやグラフィック環境 概念を理解するためには クラスを使って馴れることが近道です 本 書に記載されているコードをカットアンドペーストして 一つ一つの機能を体験してください 前提 グラ C# & VB 1 グラフィックトレーニング 概要.NET のグラフィック描画は どんなことができるのでしょうか? グラフィックオブジェクトやグラフィック環境 概念を理解するためには クラスを使って馴れることが近道です 本 書に記載されているコードをカットアンドペーストして 一つ一つの機能を体験してください 前提 グラフィックを行うためには Visual Studio の基本操作や C# または VB

More information

Prog2_2nd

Prog2_2nd 2018 年 10 月 4 日 ( 木 ) 実施 C# プログラムの基礎 基本構造 1) クラス Visual C# のプログラムの基本単位をクラスと呼ぶ Windows フォームアプリケーションを作 成する際, プロジェクトを作成すると生成されるファイルのうち,Form1.cs を例にとれば, その クラス名は Form1 である クラスは class キーワードを用いて宣言する Form1.cs

More information

Javaプログラムの実行手順

Javaプログラムの実行手順 戻り値のあるメソッド メソッドには 処理に使用する値を引数として渡すことができました 呼び出し 側からメソッドに値を渡すだけでなく 逆にメソッドで処理を行った結果の値を 呼び出し側で受け取ることもできます メソッドから戻してもらう値のことを もどりち戻り値といいます ( 図 5-4) 図 5-4. 戻り値を返すメソッドのイメージ 戻り値を受け取ることによって ある計算を行った結果や 処理に成功したか失

More information

VB実用⑦ エクセル操作Ⅰ

VB実用⑦ エクセル操作Ⅰ VB でエクセル操作 Ⅰ VB 2005 7 プログラムの概要 事務処理に於いて Microsoft 社のスプレッドシートソフトで有るエクセルは データベースソフトで有るアクセスと共に 業界標準 (De Facto Standard) で有ると謂う事が出来る 此処では 其のエクセルを Visual Basic から操作する方法を 重点的に学ぶ 今回は Visual Basic でエクセルを利用する基本と成るオブジェクト生成と

More information

インベーダープログラム

インベーダープログラム インベーダーゲーム VB 2005 5 プログラムの概要 テレビゲームの流行の魁と成る懐かしのゲーム インベーダー を作成する 先ず FIGHT!! ボタンをクリックすると インベーダーが左右に移動し乍ら 降下して来るので 自機を左右のカーソルキーで移動させ スペースキーでミサイルを発射する インベーダーが 最終ライン迄 降下して 侵略される前に 総てのインベーダーを撃墜しなければ ゲームは終了する

More information

API 連携方式 外部 DLL の呼び出し宣言 外部 DLL の呼び出し宣言のサンプルコード (Microsoft Visual C#.NET の場合 ) プログラムコードの先頭で using System.Runtime.InteropServices; が必要 クラスの内部に以下のような外部 D

API 連携方式 外部 DLL の呼び出し宣言 外部 DLL の呼び出し宣言のサンプルコード (Microsoft Visual C#.NET の場合 ) プログラムコードの先頭で using System.Runtime.InteropServices; が必要 クラスの内部に以下のような外部 D GS1-128 の描画 DLL について (ver. 2.2) 動作環境など動作環境 WindowsXP Windows Vista Windows7 Windows8/8.1 Windows10 上記 OS について すべて日本語版を対象としております 32bit アプリケーションから呼び出される必要があります 使用条件 プリンタの解像度 300dpi 以上 機能 バーコードの基本幅を 1 ドット単位で指定できる

More information

C 資料 電脳梁山泊烏賊塾 構造体 C++ の構造体 初めに 此処では Visual Studio 2017 を起動し 新しいプロジェクトで Visual C++ の Windows デスクトップを選択し Windows コンソールアプリケーションを作成する 定義と変数宣言 C++ に

C 資料 電脳梁山泊烏賊塾 構造体 C++ の構造体 初めに 此処では Visual Studio 2017 を起動し 新しいプロジェクトで Visual C++ の Windows デスクトップを選択し Windows コンソールアプリケーションを作成する 定義と変数宣言 C++ に 構造体 C++ の構造体 初めに 此処では Visual Studio 2017 を起動し 新しいプロジェクトで Visual C++ の Windows デスクトップを選択し Windows コンソールアプリケーションを作成する 定義と変数宣言 C++ に於いては 構造体を定義は下記の様に記述する ( 末尾のセミコロンを忘れない様に ) strust Point int x; int y; 上記の様に定義すれば

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション オブジェクト指向 プログラミング演習 第 4 回継承 オーバーライド ポリモルフィズム 今日のお題 継承 オーバーライド ポリモルフィズム 継承 (inherit) あるクラス c のサブクラス s を定義する : このとき s は c を継承していると言う 何かの下位概念を表すクラスは その上位概念を表すクラスの属性や機能を ( 基本的には ) 使える 継承の例 大学生 長崎県立大学の学生 大学生を継承する概念

More information

MISAO with WPF

MISAO with WPF System.AddIn を利用した アプリケーション拡張 - アドインの開発 - JZ5( 松江祐輔 )@ わんくま http://katamari.jp http://katamari.wankuma.com 2008/9/13 What s System.AddIn System.AddIn 名前空間 Visual Studio Orcus から利用可能 アプリケーションに拡張機能を提 供 なんかいろいろ特長が?

More information

正規表現概要

正規表現概要 正規表現 正規表現の概要 此処では.NET Framework の正規表現に付いて 主に正規表現パターンに付いて 基本を極く簡単に説明する 猶.NET Framework の正規表現は Perl5 の正規表現に対応する様にデザインされて居るので Perl の正規表現を理解して居れば問題は無い ( 勿論 理解して居なくても問題は無い ) 正規表現で出来る事 正規表現は 文字列を検索する為に使用する 正規表現を使うと

More information

アプリケーション

アプリケーション アプリケーション開発 お絵かきソフト 目次 お絵かきソフトを作ってみよう... 3 絵を書く枠と場所表示を作る... 3 マウスの動きを見てみよう... 4 絵を書く準備をします... 5 絵を書くとはどういうことか... 5 では線画を描いてみよう... 6 マウスをドラッグしたときだけ線を引くように改造する... 8 お絵かきソフトを作ってみよう 今回は お絵かきソフトを作ってみましょう マウスを動かして線画を書いてみましょう

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション プロシージャ プロシージャの種類 Subプロシージャ Functionプロシージャ Propertyプロシージャ Sub プロシージャ Subステートメント~ステートメントで囲まれる 実行はするけど 値は返さない 途中で抜けたいときは Exit Sub を行なう Public Sub はマクロの実行候補に表示される Sub プロシージャの例 Public Sub TestSubProc() Call

More information

GS1-128 の描画 DLL について (ver. 2.3) 動作環境など動作環境 WindowsXP Windows Vista Windows7 Windows8/8.1 Windows10 上記 OS について すべて日本語版を対象としております 32bit アプリケーションから呼び出される

GS1-128 の描画 DLL について (ver. 2.3) 動作環境など動作環境 WindowsXP Windows Vista Windows7 Windows8/8.1 Windows10 上記 OS について すべて日本語版を対象としております 32bit アプリケーションから呼び出される GS1-128 の描画 DLL について (ver. 2.3) 動作環境など動作環境 WindowsXP Windows Vista Windows7 Windows8/8.1 Windows10 上記 OS について すべて日本語版を対象としております 32bit アプリケーションから呼び出される必要があります 使用条件 プリンタの解像度 300dpi 以上 機能 バーコードの基本幅を 1 ドット単位で指定できる

More information

プレポスト【問題】

プレポスト【問題】 コース名 : 基礎から学ぶ!Excel VBA による業務の自動化 受講日 氏名 1 Excel VBA を使用するメリットとして誤っているものを 1 つ選びなさい 1. 手作業では手間のかかる作業も プログラムに記述した処理は一括して実行されるため 何段階ものメニュー操作を行う必要がなくなる 2. プログラムに書いた処理は記述どおりに実行されるため だれがいつ何回行っても確実な処理がなされ 誤動作を防ぐことができる

More information

CashDrawer ライブラリ API 仕様書 2014/07/09 CashDrawer ライブラリ API 仕様書 Rev / 10

CashDrawer ライブラリ API 仕様書 2014/07/09 CashDrawer ライブラリ API 仕様書 Rev / 10 2014/07/09 CashDrawer ライブラリ API 仕様書 Rev. 00.0.04 1 / 10 目次 1. ファイル構成... 3 2. 環境 3 2.1. 動作環境 OS... 3 2.2. コンパイル時の注意点... 3 2.3. USB ドライバ... 3 3. 関数一覧... 4 3.1. USB 接続確認処理 (CD_checkConnect CD_checkConnect)

More information

平成 30 年度 プログラミング研修講座 岩手県立総合教育センター

平成 30 年度 プログラミング研修講座 岩手県立総合教育センター 平成 30 年度 プログラミング研修講座 岩手県立総合教育センター 目次第 1 章プログラミングについて 1 ソフトウェアの働き 1 2 プログラミング言語 1 3 主なプログラミング言語の歴史 2 第 2 章 Visual Basic について 1 Visual Basic とは 3 2.NET Framework の環境 3 3 Visual Basic と.NET Framework の関係

More information

プログラミング入門1

プログラミング入門1 プログラミング入門 1 第 9 回 メソッド (3) 授業の前に自己点検 以下の質問に答えられますか? メソッドの宣言とは 起動とは何ですか メソッドの宣言はどのように書きますか メソッドの宣言はどこに置きますか メソッドの起動はどのようにしますか メソッドの仮引数 実引数 戻り値とは何ですか メソッドの起動にあたって実引数はどのようにして仮引数に渡されますか 戻り値はどのように利用しますか 変数のスコープとは何ですか

More information

VFD256 サンプルプログラム

VFD256 サンプルプログラム VFD256 サンプルプログラム 目次 1 制御プログラム... 1 2.Net 用コントロール Vfd256 の使い方... 11 2.1 表示文字列の設定... 11 2.2 VFD256 書込み前のクリア処理... 11 2.3 書き出しモード... 11 2.4 表示モード... 12 2.5 表示... 13 2.6 クリア... 13 2.7 接続方法 ボーレートの設定... 13 2.8

More information

回文作成支援プログラム

回文作成支援プログラム 回文作成支援プログラム C# 2005 2 プログラムの概要 原文を 1 字入力する度に 其の回文が順次表示される 即ち AB と入力すると ABA と表示され ABC と入力すると ABCBA と表示される 亦 消去ボタンをクリックすると 原文 及び 回文を消去する事も出来る 終了ボタンをクリックすると プログラムをメモリから消去して終了する 今回の課題項目 単純変数の宣言 ( データ型変数名 ;)

More information

VB実用Ⅲ⑩ フリーデータベースⅡ

VB実用Ⅲ⑩ フリーデータベースⅡ MySQL の利用 MySQL の ODBC(MyODBC) テキストでは MySQL Connector/ODBC(mysql-connector-odbc-3.51.14-win32.msi) をインストールした場合に付いて解説して居るが 此処では MyODBC(MyODBC-3.51.10-x86-win-32bit.msi) をインストールし myodbc-3.51.06-conv_ujis.zip

More information

Microsoft Word - VBA基礎(6).docx

Microsoft Word - VBA基礎(6).docx あるクラスの算数の平均点と理科の平均点を読み込み 総点を計算するプログラムを考えてみましょう 一クラスだけ読み込む場合は test50 のようなプログラムになります プログラムの流れとしては非常に簡単です Sub test50() a = InputBox(" バナナ組の算数の平均点を入力してください ") b = InputBox(" バナナ組の理科の平均点を入力してください ") MsgBox

More information

回文作成支援プログラム

回文作成支援プログラム 回文作成支援プログラム VB1 プログラムの概要 原文を 1 字入力する度に 其の回文が順次表示される 即ち AB と入力すると ABA と表示され ABC と入力すると ABCBA と表示される 亦 消去ボタンをクリックすると 原文 及び 回文を消去する事も出来る 終了ボタンをクリックすると プログラムをメモリから消去して終了する 今回の課題項目 単純変数の宣言 (Dim) 標準コントロールの利用

More information

Java言語 第1回

Java言語 第1回 Java 言語 第 2 回簡単な Java プログラムの作成と実行 知的情報システム工学科 久保川淳司 kubokawa@me.it-hiroshima.ac.jp 簡単な Java プログラム Java プログラムのファイル名 Java プログラムのファイル名命名ルール ファイル名とクラス名は同じでなければならない HelloJava.java public class HelloJava { public

More information

メディプロ1 Javaプログラミング補足資料.ppt

メディプロ1 Javaプログラミング補足資料.ppt メディアプロジェクト演習 1 Javaプログラミング補足資料 l Javaとは l JavaScript と Java 言語の違い l オブジェクト指向 l コンストラクタ l 継承 抽象クラス 本資料内のページ番号は, 以下の参考書のページを引用している高橋麻奈 : やさしい Java, ソフトバンククリエイティブ (2,625 円 ) はじめに l プログラミング言語とは? l オブジェクト指向とは?

More information

Javaの作成の前に

Javaの作成の前に メディアプロジェクト演習 1 参考資料 Javaとは JavaScript と Java 言語の違い オブジェクト指向 コンストラクタ サーブレット 本資料内のページ番号は, 以下の参考書のページを引用している 高橋麻奈 : やさしい Java, ソフトバンククリエイティブ (2,625 円 ) はじめに プログラミング言語とは? オブジェクト指向とは? Java 言語とは? JavaとJavaScriptの違いとは?

More information

た場合クラスを用いて 以下のように書くことが出来る ( 教科書 p.270) プログラム例 2( ソースファイル名 :Chap08/AccountTester.java) // 銀行口座クラスとそれをテストするクラス第 1 版 // 銀行口座クラス class Account String name

た場合クラスを用いて 以下のように書くことが出来る ( 教科書 p.270) プログラム例 2( ソースファイル名 :Chap08/AccountTester.java) // 銀行口座クラスとそれをテストするクラス第 1 版 // 銀行口座クラス class Account String name クラス ( 教科書第 8 章 p.267~p.297) 前回は処理をまとめる方法として メソッドについて学習した 今回はメソッドとその処理の対象となるデータをまとめるためのクラスについて学習する このクラスはオブジェクト指向プログラミングを実現するための最も重要で基本的な技術であり メソッドより一回り大きなプログラムの部品を構成する 今回はクラスにおけるデータの扱いとクラスの作成方法 使用方法について説明していく

More information

チャットアプリ

チャットアプリ チャットアプリ Socket クラスに依る TCP 非同期通信の方法 複数のクライアントが同時に接続出来る TCP を利用したクライアントサーバー型チャットアプリケーションを TcpClient と TcpListener クラスを使わずに Socket クラスを使って作る方法を紹介する 初めに 此処では 複数のクライアントが同時に接続出来る TCP を利用したクライアントサーバー型チャットアプリケーション

More information

Prog2_4th

Prog2_4th 2018 年 10 月 18 日 ( 木 ) 実施 イベントハンドライベントハンドラとは Windows フォーム上のコントロールに対して クリックされた とか 文字列を変更された とかいったイベントを行った際に, それを受け取って処理を行うメソッドをイベントハンドラと呼ぶ 本日の課題第 3 回の授業では, フォームデザイナーで該当するコントロールをダブルクリックして, コードエディタに表示されたイベントハンドラの処理を記述したが,

More information

Secure iNetSuite for .NET 4.0Jの新仕様について

Secure iNetSuite for .NET 4.0Jの新仕様について Secure inetsuite for.net 4.0J の新仕様について グレープシティ株式会社 2013 年 8 月初版 メール送受信とファイル転送機能を実現する通信コンポーネント Secure inet Suite の通信モードの仕様が新しくなりました 本資料では従来のバージョンとの違いとメリットをコードを使って詳しく解説します はじめに 2013 年 9 月発売の Secure FTP for.net

More information

3D回転体プログラム

3D回転体プログラム 3D 回転体プログラム VB 2005 4 プログラムの概要 入力画面で マウスを用いて 側面より見た平面図を描きます マウスの左ボタンをクリックする事で連続線を描き 右ボタンをクリックすると新しい線を描く事が出来る 側面図が完成すると 回転の基本角度を設定して 確定ボタンをクリックすると 平面図を立体図に座標変換する 各軸の回転角度を設定して 表示ボタンをクリックすると 立体図が表示される 各軸の回転角度を変更して

More information

Sort-of-List-Map(A)

Sort-of-List-Map(A) Java オブジェクト集合のソートとラムダ式の初歩 山本富士男 2016-4-23 この資料は Java での コレクション Coections と ジェネリクス Generics に関してさらに深く学ぶためのものです 以下の事項を学びます レポート課題が 5 ページの末尾にあります 名称のない内部クラスである 匿名クラス を使う 一般のオブジェクトの集合 (List や Map など ) を何らかの基準でソートする

More information

PYTHON 資料 電脳梁山泊烏賊塾 PYTHON 入門 文字列 文字列リテラル プログラムの中で文字列を表す方法は幾つか有るが 基本的な方法は下記の 2 種で有る 対象と成る文字の集まりをダブルクオーテーション ( " ) で囲うか シングルクオーテーション ( ' ) で囲う PYTHON3 "

PYTHON 資料 電脳梁山泊烏賊塾 PYTHON 入門 文字列 文字列リテラル プログラムの中で文字列を表す方法は幾つか有るが 基本的な方法は下記の 2 種で有る 対象と成る文字の集まりをダブルクオーテーション (  ) で囲うか シングルクオーテーション ( ' ) で囲う PYTHON3 PYTHON 入門 文字列 文字列リテラル プログラムの中で文字列を表す方法は幾つか有るが 基本的な方法は下記の 2 種で有る 対象と成る文字の集まりをダブルクオーテーション ( " ) で囲うか シングルクオーテーション ( ' ) で囲う " 文字列 " ' 文字列 ' 他のプログラミング言語ではダブルクオーテーションとシングルクオーテーションで囲う場合では エスケープ処理等の扱いが異なる物が多いが

More information

Microsoft PowerPoint - prog04.ppt

Microsoft PowerPoint - prog04.ppt プログラミング言語 3 第 04 回 (2007 年 10 月 15 日 ) 1 今日の配布物 片面の用紙 1 枚 今日の課題が書かれています 本日の出欠を兼ねています 2/33 1 今日やること http://www.tnlab.ice.uec.ac.jp/~s-okubo/class/java06/ にアクセスすると 教材があります 2007 年 10 月 15 日分と書いてある部分が 本日の教材です

More information

Java講座

Java講座 ~ 第 1 回 ~ 情報科学部コンピュータ科学科 2 年竹中優 プログラムを書く上で Hello world 基礎事項 演算子 構文 2 コメントアウト (//, /* */, /** */) をしよう! インデントをしよう! 変数などにはわかりやすい名前をつけよう! 要するに 他人が見て理解しやすいコードを書こうということです 3 1. Eclipse を起動 2. ファイル 新規 javaプロジェクト

More information

構造体

構造体 構造体 構造体を取り扱うには System.Runtime.InteropServices 名前空間をインポートして置くと便利で有る Imports System.Runtime.InteropServices using System.Runtime.InteropServices; C# ユーザー定義型 (Type) と構造体 (Structure) 6.0 のユーザー定義型 (Type) を.NET

More information

印刷

印刷 印刷 Windows フォームに於ける印刷のサポート Windows フォームに於ける印刷では 主に ユーザーに依る印刷を可能にする為の PrintDocument コンポーネントと Windows オペレーティングシステムを常用して居るユーザーに見慣れたグラフィカルインターフェイスを提供する為の PrintPreviewDialog コントロール PrintDialog コンポーネント 及び PageSetupDialog

More information

プラグイン

プラグイン プラグイン プラグイン詳細 1 Adobe Photoshop や Becky! Internet Mail 等のアプリケーションでは プラグイン ( 又は アドイン エクステンション等 ) と呼ばれるプログラムをインストールする事に依り 機能を追加する事が出来る様に成って居る 此処では 此の様なプラグイン機能を持ったアプリケーションの作り方を考えて観る事にする 其れは インターフェイスを使用すると謂う方法で有る

More information

回文作成支援プログラム

回文作成支援プログラム 回文作成支援プログラム VB 2005 2 プログラムの概要 原文を 1 字入力する度に 其の回文が順次表示される 即ち AB と入力すると ABA と表示され ABC と入力すると ABCBA と表示される 亦 消去ボタンをクリックすると 原文 及び 回文を消去する事も出来る 終了ボタンをクリックすると プログラムをメモリから消去して終了する 今回の課題項目 単純変数の宣言 (Dim) Windows

More information

GUIプログラムⅣ

GUIプログラムⅣ GUI プログラム Ⅳ 画像指定ウィンドウの生成 ファイル名 :awtimage.java import java.awt.*; import java.awt.event.*; public class awtimage extends Frame // コンポーネントクラスの宣言 Button btnbrowse; Label lblcaption7; TextField txtimage; //

More information

Microsoft PowerPoint - 計算機言語 第7回.ppt

Microsoft PowerPoint - 計算機言語 第7回.ppt 計算機言語第 7 回 長宗高樹 目的 関数について理解する. 入力 X 関数 f 出力 Y Y=f(X) 関数の例 関数の型 #include int tasu(int a, int b); main(void) int x1, x2, y; x1 = 2; x2 = 3; y = tasu(x1,x2); 実引数 printf( %d + %d = %d, x1, x2, y);

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション 多分岐選択 条件式 If Then Else IIF Select Switch 今日の目的 Dim n As Long n = 10 If n = 10 Then 条件式 Debug.Print ゆっくりしていってね! End If 比較演算子 その他 よく使用する演算子 文字列型にたいする条件式 条件式 オブジェクト型 バリアント型に対する条件式 比較演算子 = 等しい 等しくない >=

More information

D:\Documents\Visual Studio 2015\Projects\MyHomePage 用サンプル \ExcelAndWord\ExcelAndWord\MainForm.cs 1 /* */ Excel や Word とやりとりする ~9,20 仕様 Excel

D:\Documents\Visual Studio 2015\Projects\MyHomePage 用サンプル \ExcelAndWord\ExcelAndWord\MainForm.cs 1 /* */ Excel や Word とやりとりする ~9,20 仕様 Excel D:\Documents\Visual Studio 2015\Projects\MyHomePage 用サンプル \ExcelAndWord\ExcelAndWord\MainForm.cs 1 /* */ Excel や Word とやりとりする 2015.9.19~9,20 仕様 Excel の場合は 処理メニュー選択用の新しいフォームを開き この実行ファイルと同じフォルダにある test.xlsb

More information

問題1 以下に示すプログラムは、次の処理をするプログラムである

問題1 以下に示すプログラムは、次の処理をするプログラムである 問題 1 次のプログラムの出力結果を a~d の中から選べ public class Problem1 { int i=2; int j=3; System.out.println("i"+j); a) 23,b) 5,c) i3,d) ij 問題 2 次のプログラムの出力結果を a~d の中から選べ public class Problem2 { int a=6; if((a>=2)&&(a

More information

C 資料 電脳梁山泊烏賊塾 キャスト C++ のキャスト 初めに 此処では Visual Studio 2017 を起動し 新しいプロジェクトで Visual C++ の Windows デスクトップを選択し Windows コンソールアプリケーションを作成する C++ でのキャスト

C 資料 電脳梁山泊烏賊塾 キャスト C++ のキャスト 初めに 此処では Visual Studio 2017 を起動し 新しいプロジェクトで Visual C++ の Windows デスクトップを選択し Windows コンソールアプリケーションを作成する C++ でのキャスト キャスト C++ のキャスト 初めに 此処では Visual Studio 2017 を起動し 新しいプロジェクトで Visual C++ の Windows デスクトップを選択し Windows コンソールアプリケーションを作成する C++ でのキャスト C++ では其のキャストを 3 種類に分類して居る 静的な普通の型変換 (static_cast) 先ずは 1 つ目は 静的な普通の型変換で有る

More information

Prog2_9th

Prog2_9th 2017 年 11 月 30 日 ( 木 ) 実施 Canvas による描画 Canvas とは Canvas は, 描画コールを保持するためのクラスである 描画には, 次の 4 つの要素が必要である (1) ビットマップピクセル ( 画素 ) を保持 (2) キャンバス描画コール ( ビットマップへの書き出し要請 ) に対応 (3) 描画プリミティブ描画領域, パス, テキスト, ビットマップ等

More information

Prog2_10th

Prog2_10th 2017 年 12 月 7 日 ( 木 ) 実施 効果音の付加 SoundPool とは Android には音を処理するクラスが複数用意されているが, その中で SoundPool は, 予め音のデータをメモリ上に読み込んで再生するため, 長い音楽よりも短い音を扱うのに適している また,SoundPool では遅延が無いので, 効果音を付加したい場面で用いられる 授業の準備 1)Android Studio

More information

ただし 無作為にスレッドを複数実行すると 結果不正やデッドロックが起きる可能性がある 複数のスレッド ( マルチスレッド ) を安全に実行する ( スレッドセーフにする ) ためには 同期処理を用いるこ とが必要になる 同期処理は 予約語 synchronized で行うことができる ここでは sy

ただし 無作為にスレッドを複数実行すると 結果不正やデッドロックが起きる可能性がある 複数のスレッド ( マルチスレッド ) を安全に実行する ( スレッドセーフにする ) ためには 同期処理を用いるこ とが必要になる 同期処理は 予約語 synchronized で行うことができる ここでは sy オブジェクト指向プログラミング演習 2010/10/27 演習課題 スレッド ( その 2) 同期処理 結果不正 デッドロック 前回のスレッドの演習では 複数のスレッドを実行し 一つのプログラムの中の違う処理を同時に実行し た ただし 無作為にスレッドを複数実行すると 結果不正やデッドロックが起きる可能性がある 複数のスレッド ( マルチスレッド ) を安全に実行する ( スレッドセーフにする )

More information

Microsoft PowerPoint - chap10_OOP.ppt

Microsoft PowerPoint - chap10_OOP.ppt プログラミング講義 Chapter 10: オブジェクト指向プログラミング (Object-Oriented Programming=OOP) の入り口の入り口の入り口 秋山英三 F1027 1 例 : 部屋のデータを扱う // Test.java の内容 public class Test { public static void main(string[] args) { double length1,

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション オブジェクト指向 プログラミング演習 第 2 回クラス インスタンス メソッド フィールド コンストラクタ ICPC の宣伝 国際大学対抗プログラミングコンテスト 3 人一組のチームでプログラムを書く速さを競う 国内予選 : ネットワーク上で 6 月末 ~7 月頭 アジア地区予選 : 日本国内で秋に開催 世界大会 :2020 年は 6 月にモスクワで 参加登録締切 : 国内予選の 2~3 週間前 今年は

More information

// このクラスの有効期間中の各呼び出しに使用される キャッシュされた Socket オブジェクト Socket socket = null; // 非同期処理が完了したことを通知するために信号を送るオブジェクト static ManualResetEvent clientdone = new Ma

// このクラスの有効期間中の各呼び出しに使用される キャッシュされた Socket オブジェクト Socket socket = null; // 非同期処理が完了したことを通知するために信号を送るオブジェクト static ManualResetEvent clientdone = new Ma HOW DO I ソケットで通信を行うには ここでは以下の手順で説明します ソケットクライアントを作成するデータを送信するデータを受信するソケットクライアントを使用する ソケットクライアントを作成する 1. このコンテンツのサポートファイルの Start フォルダから "UDPClient" プロジェクトを開きます 2. クライアントを動作させるため コンピューターで簡易 TCP/IP サービスを有効にする必要があります

More information

JavaプログラミングⅠ

JavaプログラミングⅠ Java プログラミング Ⅰ 12 回目クラス 今日の講義で学ぶ内容 クラスとは クラスの宣言と利用 クラスの応用 クラス クラスとは 異なる複数の型の変数を内部にもつ型です 直観的に表現すると int 型や double 型は 1 1 つの値を管理できます int 型の変数 配列型は 2 5 8 6 3 7 同じ型の複数の変数を管理できます 配列型の変数 ( 配列変数 ) クラスは double

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション 基本 Java プログラミング演習 第 13 回 担当 : 植村 今後の予定 7/15 第 13 回 今回 7/22 第 14 回 小テスト ( クラス ) 7/29 第 15 回 総まとめテスト レポート提出 期末テストの時間割に Java のテストの欄がありますが無視してください 再テストはまた別途連絡いたします 2 CHAPTER 11 はじめてのクラス前回の復習 クラスクラスを構成する要素

More information

プログラミング実習I

プログラミング実習I プログラミング実習 I 05 関数 (1) 人間システム工学科井村誠孝 m.imura@kwansei.ac.jp 関数とは p.162 数学的には入力に対して出力が決まるもの C 言語では入出力が定まったひとまとまりの処理 入力や出力はあるときもないときもある main() も関数の一種 何かの仕事をこなしてくれる魔法のブラックボックス 例 : printf() 関数中で行われている処理の詳細を使う側は知らないが,

More information

Java知識テスト問題

Java知識テスト問題 Java 知識テスト SDAS プログラマ(Java 編 ) 運営事務局 このテストは J2EE プログラマとしての Java の知識を評価するものです 問題は 30 問, テスト時間は J2EE 知識テストとあわせて 90 分です 問題は全て択一式です 選択肢から 1 つだけ選択してください 資料の閲覧は禁止です テストが終わり次第 答案用紙を提出していただいてかまいません テスト終了後, 本テストの内容を他の方に話さないでください

More information

Java Scriptプログラミング入門 3.6~ 茨城大学工学部情報工学科 08T4018Y 小幡智裕

Java Scriptプログラミング入門 3.6~ 茨城大学工学部情報工学科 08T4018Y  小幡智裕 Java Script プログラミング入門 3-6~3-7 茨城大学工学部情報工学科 08T4018Y 小幡智裕 3-6 組み込み関数 組み込み関数とは JavaScript の内部にあらかじめ用意されている関数のこと ユーザ定義の関数と同様に 関数名のみで呼び出すことができる 3-6-1 文字列を式として評価する関数 eval() 関数 引数 : string 式として評価する文字列 戻り値 :

More information

Microsoft PowerPoint - prog09.ppt

Microsoft PowerPoint - prog09.ppt プログラミング言語 3 第 09 回 (2007 年 11 月 26 日 ) 1 今日の配布物 片面の用紙 1 枚 今日の課題が書かれています 本日の出欠を兼ねています 2/40 今日やること http://www.tnlab.ice.uec.ac.jp/~s-okubo/class/java06/ にアクセスすると 教材があります 2007 年 11 月 27 日分と書いてある部分が 本日の教材です

More information

回文作成支援プログラム

回文作成支援プログラム 電光掲示板プログラム VB 2005 1 プログラムの概要 掲示文を入力し 表示開始ボタンをクリックすると 入力した掲示文が 上部の表示域に 右から左へ流れる様に表示される 亦 表示停止ボタンをクリックすると 掲示文の動きが停止する 終了ボタンをクリックすると タイマーを停止し プログラムをメモリから消去して終了する 今回の課題項目 単純変数の宣言 (Private) Windows フォームコントロールの利用

More information

Prog2_10th

Prog2_10th 2016 年 12 月 8 日 ( 木 ) 実施 効果音の付加 SoundPool とは Android には音を処理するクラスが複数用意されているが, その中で SoundPool は, 予め音のデータをメモリ上に読み込んで再生するため, 長い音楽よりも短い音を扱うのに適している また,SoundPool では遅延が無いので, 効果音を付加したい場面で用いられる 授業の準備 1)Android Studio

More information