ユーザー定義のデリゲートはC#でどのように使用および作成されますか?

StackOverflow https://stackoverflow.com/questions/618143

  •  03-07-2019
  •  | 
  •  

質問

.NETでwinフォームを設計するときにデリゲートを使用しました...つまり、ボタンをドラッグ/ドロップし、ダブルクリックして、myButton_clickイベントを入力します。 C#でユーザー定義のデリゲートを作成および使用する方法を理解したい。

ユーザー定義のデリゲートはC#でどのように使用および作成されますか?

役に立ちましたか?

解決

このトピックに関するチュートリアルを読むことをお勧めします。

基本的に、デリゲート型を宣言します:

public delegate void MyDelegate(string message);

次に、直接割り当てて呼び出すことができます:

MyDelegate = SomeFunction;
MyDelegate("Hello, bunny");

またはイベントを作成します:

public event MyDelegate MyEvent;

その後、次のように外部からイベントハンドラを追加できます。

SomeObject.MyEvent += SomeFunction;

Visual Studioはこれに役立ちます。 + =を入力したら、tab-tabを押すだけで、ハンドラーが作成されます。

その後、オブジェクト内からイベントを起動できます:

if (MyEvent != null) {
    MyEvent("Hello, bunny");
}

これが基本的な使用法です。

他のヒント

public delegate void testDelegate(string s, int i);

private void callDelegate()
{
    testDelegate td = new testDelegate(Test);

    td.Invoke("my text", 1);
}

private void Test(string s, int i)
{
    Console.WriteLine(s);
    Console.WriteLine(i.ToString());
}

完全な複製ではありません(複製は見つかりません)が、SOに関する多くの情報があります。試してください

イベントとデリゲートの違いを取得する始めて、見てください

使用する場合。 。 。

クロージャーとは

このデリゲートは何をしていますか。 。 。

これらのヘルプを期待してください

幅広い回答については、記事を確認してください。 「http://www.codeproject.com/script/Membership/View.aspx?mid=3651361」rel = "nofollow noreferrer"> mohamad halabi 。 短い回答については、c:/ Program Files / Microsoft Visual Studio 9.0 / Samples / 1033 /フォルダーからこのわずかに変更された例を確認してください...

using System;
using System.IO; 


namespace DelegateExample
{
  class Program
  {
    public delegate void PrintDelegate ( string s );

    public static void Main ()
    {
      PrintDelegate delFileWriter = new PrintDelegate ( PrintFoFile );
      PrintDelegate delConsoleWriter = new PrintDelegate ( PrintToConsole);
      Console.WriteLine ( "PRINT FIRST TO FILE by passing the print delegate -- DisplayMethod ( delFileWriter )" );

      DisplayMethod ( delFileWriter );      //prints to file
      Console.WriteLine ( "PRINT SECOND TO CONSOLE by passing the print delegate -- DisplayMethod ( delConsoleWriter )" );
      DisplayMethod ( delConsoleWriter ); //prints to the console
      Console.WriteLine ( "Press enter to exit" );
      Console.ReadLine ();

    }

    static void PrintFoFile ( string s )
    {
      StreamWriter objStreamWriter = File.CreateText( AppDomain.CurrentDomain.BaseDirectory.ToString() + "file.txt" );
      objStreamWriter.WriteLine ( s );
      objStreamWriter.Flush ();
      objStreamWriter.Close ();
    }


    public static void DisplayMethod ( PrintDelegate delPrintingMethod )
    { 
      delPrintingMethod( "The stuff to print regardless of where it will go to" ) ;
    }

    static void PrintToConsole ( string s )
    {
      Console.WriteLine ( s );    
    } //eof method 
  } //eof classs 
} //eof namespace 
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top