関数引数

値渡し

メソッドを呼び出す際に値のコピーを渡す

指定方法

特に無し

参照渡し[ref]

メソッドを呼び出す際に値の参照情報を渡す
C/C++でのポインタ渡しと同じ

指定方法

引数を指定する際に「ref」を付ける

出力引数[out]

関数内で初期化をしてから変数を使用する参照渡し
参照渡しとの違いは
  • 初期化をしてから使う
    • 初期化の必要が無い
    • 変数の更新には向かない
  • メソッド内で必ず値を与えなくてはならない

指定方法

引数を指定する際に「out」を付ける

デリゲート

デリゲートの作成

//MessageBox:デリゲートで更新依頼をするデータをまとめたデータクラス(以下は例)
public class MessageBox : EventArgs
    {
        public string Message;
    }
// デリゲート登録
public delegate void OnDelegeteEventHandler(object sender, MessageBox e);
// イベントハンドラ登録
public event OnDelegeteEventHandler EventHandler;
// デリゲートのラッパ関数
public virtual void OnDelegate(MessageBox e)
{
    if (EventHandler != null)
    {
        EventHandler(this, e);
    }
}
 

イベントを発生させる

イベントに必要な情報を作成後、イベントを発生させる
public void foo(){
   MessageBox e = new MessageBox();
   e.Message = "情報をいれる"
   OnDelegate(e); //イベントの発生
}
 

デリゲートでの操作内容を定義

デリゲートで操作したいものが定義してあるクラスで作成する
private string Message = null;
private void WriteMessage()
{
    if (Message != null)
    {
        string WriteMessage = Message + "\r\n";
        ViewLog_richTextBox.AppendText(WriteMessage);
        ViewLog_richTextBox.ScrollToCaret();
    }
}
// イベントでの操作内容をデリゲート関数を作成
private void MessageInvoke(object sender , MessageBox e){
    Message = e.Message;
    Invoke(new MethodInvoker(WriteMessage));
}
 

デリゲートを操作するクラスでのデリゲート登録

// イベントハンドラにデリゲートの登録
//イベントが発生するクラスDoEvent,変数をdo_eventとする
do_event.EventHandler += new DoEvent.OnDelegeteEventHandler(MessageInvoke);
 

親フォームから子フォームのUIを操作する方法

親フォームは子フォームの起動をしているため、子フォームのメソッドを呼び出すことは通常のメソッド呼び出しと同じである。
しかし、UIを操作する場合にはデリゲートを使用しなくてはいけない。

そのため、子フォームで「デリゲートでの操作内容を定義」を行い、親フォームでこのデリゲートを呼び出せばいい。
// 上記のデリゲートを使用
// 子フォームはformChildで起動しているとする
 
// 親から子のデリゲートを呼びさす際はobject senderは不必要
formChild.MessageInvoke(/*ここでの引数はイベントが無いので必要な情報のみの引数で可*/);
 

最終更新:2009年06月04日 09:42