DeleGateとは? わかりやすく解説

Delegate クラス

静的メソッドまたはクラス インスタンスとそのクラスインスタンス メソッド参照するデータ構造体であるデリゲート表します

名前空間: System
アセンブリ: mscorlib (mscorlib.dll 内)
構文構文

<SerializableAttribute> _
<ClassInterfaceAttribute(ClassInterfaceType.AutoDual)> _
<ComVisibleAttribute(True)> _
Public MustInherit Class
 Delegate
    Implements ICloneable, ISerializable
[SerializableAttribute] 
[ClassInterfaceAttribute(ClassInterfaceType.AutoDual)] 
[ComVisibleAttribute(true)] 
public abstract class Delegate : ICloneable,
 ISerializable
[SerializableAttribute] 
[ClassInterfaceAttribute(ClassInterfaceType::AutoDual)] 
[ComVisibleAttribute(true)] 
public ref class Delegate abstract : ICloneable,
 ISerializable
/** @attribute SerializableAttribute() */ 
/** @attribute ClassInterfaceAttribute(ClassInterfaceType.AutoDual) */ 
/** @attribute ComVisibleAttribute(true) */ 
public abstract class Delegate implements ICloneable,
 ISerializable
SerializableAttribute 
ClassInterfaceAttribute(ClassInterfaceType.AutoDual) 
ComVisibleAttribute(true) 
public abstract class Delegate implements ICloneable,
 ISerializable
解説解説

Delegate クラスは、デリゲート型基本クラスです。ただし、システムコンパイラ限りDelegate クラスまたは MulticastDelegate クラスから明示的に派生させることができますデリゲート型から新しい型を派生させることはできません。Delegate クラスは、デリゲート型とは見なされません。このクラスは、デリゲート型派生させるために使用されるクラスです。

ほとんどの言語では delegate キーワードが実装されています。また、それらの言語コンパイラMulticastDelegate クラスから派生させることができますこのため開発者各言語提供されている delegate キーワードを使用する必要があります

デリゲート型宣言によって、1 つ上のメソッドシグネチャ指定するコントラクト確立します。デリゲートは、次の参照先を持つデリゲート型インスタンスです。

デリゲート バインディング詳細については、「共通型システムデリゲート」と「CreateDelegate(Type,Object,MethodInfo,Boolean)」を参照してください

メモメモ

.NET Framework Version 1.0 および Version 1.1 では、メソッドシグネチャデリゲート型指定されシグネチャ完全に一致する場合にのみ、デリゲートメソッドを表すことができます。つまり、上述最初の項目と 3 番目の項目のみがサポートされ最初の項目では完全な型の一致が必要です。

デリゲート最初引数に対して閉じられインスタンス メソッド表している場合 (最も一般的)、デリゲートは、メソッドエントリ ポイントへの参照と、そのメソッド定義した型に適用可能な型である、ターゲット呼ばれるオブジェクトへの参照格納しますデリゲートオープンインスタンス メソッド表している場合デリゲートはそのメソッドエントリ ポイントへの参照格納してます。デリゲート シグネチャは、仮パラメータ リストに非表示this パラメータ含める必要があります。この場合デリゲートターゲット オブジェクトへの参照持ちません。デリゲート呼び出すときに、ターゲット オブジェクト指定する必要があります

デリゲート静的メソッド表している場合デリゲートはそのメソッドエントリ ポイントへの参照格納してます。デリゲート最初引数に対して閉じている静的メソッド表している場合デリゲートメソッドエントリ ポイントへの参照と、そのメソッド最初引数の型に適用できるターゲット オブジェクトへの参照格納してます。デリゲート呼び出したときに、最初静的メソッド引数ターゲット オブジェクト受け取ります

デリゲート呼び出しリストは、順序付けられたデリゲートセットであり、呼び出しリスト内の各要素デリゲートによって呼び出されるメソッド1 つずつ表します呼び出しリストには、重複メソッド格納できますデリゲートメソッド呼び出すときは、呼び出しリスト出現する順にメソッド呼び出します。デリゲート呼び出しリスト内のすべてのメソッド呼び出そうとします重複メソッドは、呼び出しリスト出現するたびに呼び出されます。デリゲート不変であるため、デリゲート呼び出しリスト一度作成すると、そのリスト変わりません。

複数メソッド呼び出したり、組み合わせ演算使用できるデリゲートを、それぞれ "マルチキャスト デリゲート" および "組み合わせ可能デリゲート" と呼びます

CombineRemove などの組み合わせ演算によって既存デリゲート変更されることはありません。その代わり組み合わせ演算では、演算結果、または変更されないデリゲート、または null 参照 (Visual Basic では Nothing) が格納され新しデリゲート返されます。演算結果メソッドをまったく参照していないデリゲート場合は、null 参照 (Visual Basic では Nothing) が返されます。要求した演算無効場合は、変更されないデリゲート返されます。

呼び出されメソッド例外スローした場合は、メソッド実行中止しデリゲート呼び出し元に例外戻され呼び出しリスト内の残りメソッド呼び出されません。呼び出し元で例外キャッチされても、この動作変わりません。

デリゲート呼び出したメソッドシグネチャ戻り値含まれる場合デリゲート呼び出しリスト内の最後要素戻り値返します参照渡しされたパラメータシグネチャ含まれる場合、そのパラメータ最終的な値は、呼び出しリスト内のすべてのメソッド順次実行されたことによって更新され結果の値になります

コンパイラBeginInvokeEndInvoke という 2 つ追加メソッドデリゲート提供します。これらのメソッド詳細については、「同期メソッド非同期呼び出し」を参照してください

デリゲート最も近い C または C++機能関数ポインタです。デリゲートは、静的メソッドまたはインスタンス メソッドを表すことができますデリゲートインスタンス メソッド表している場合デリゲートは、そのメソッドエントリ ポイントへの参照だけでなく、クラス インスタンスへの参照格納してます。関数ポインタとは異なりデリゲートオブジェクト指向タイプ セーフ機能です。

使用例使用例

標準デリゲート定義する方法次の例に示します

Imports System

Public Class SamplesDelegate

   ' Declares a delegate for a method that takes in an int and returns
 a String.
   Delegate Function myMethodDelegate(myInt
 As Integer) As [String]

   ' Defines some methods to which the delegate can point.
   Public Class mySampleClass

      ' Defines an instance method.
      Public Function myStringMethod(myInt
 As Integer) As [String]
         If myInt > 0 Then
            Return "positive"
         End If
         If myInt < 0 Then
            Return "negative"
         End If
         Return "zero"
      End Function 'myStringMethod

      ' Defines a static method.
      Public Shared Function
 mySignMethod(myInt As Integer) As
 [String]
         If myInt > 0 Then
            Return "+"
         End If
         If myInt < 0 Then
            Return "-"
         End If
         Return ""
      End Function 'mySignMethod
   End Class 'mySampleClass

   Public Shared Sub Main()

      ' Creates one delegate for each method.
      Dim mySC As New mySampleClass()
      Dim myD1 As New myMethodDelegate(AddressOf
 mySC.myStringMethod)
      Dim myD2 As New myMethodDelegate(AddressOf
 mySampleClass.mySignMethod)

      ' Invokes the delegates.
      Console.WriteLine("{0} is {1}; use the sign ""{2}"".",
 5, myD1(5), myD2(5))
      Console.WriteLine("{0} is {1}; use the sign ""{2}"".",
 - 3, myD1(- 3), myD2(- 3))
      Console.WriteLine("{0} is {1}; use the sign ""{2}"".",
 0, myD1(0), myD2(0))

   End Sub 'Main

End Class 'SamplesDelegate 


'This code produces the following output:
' 
'5 is positive; use the sign "+".
'-3 is negative; use the sign "-".
'0 is zero; use the sign "".


using System;
public class SamplesDelegate  {

   // Declares a delegate for a method that takes in an int and returns
 a String.
   public delegate String myMethodDelegate( int
 myInt );

   // Defines some methods to which the delegate can point.
   public class mySampleClass  {

      // Defines an instance method.
      public String myStringMethod ( int myInt
 )  {
         if ( myInt > 0 )
            return( "positive" );
         if ( myInt < 0 )
            return( "negative" );
         return ( "zero" );
      }

      // Defines a static method.
      public static String mySignMethod ( int
 myInt )  {
         if ( myInt > 0 )
            return( "+" );
         if ( myInt < 0 )
            return( "-" );
         return ( "" );
      }
   }

   public static void Main()
  {

      // Creates one delegate for each method.
      mySampleClass mySC = new mySampleClass();
      myMethodDelegate myD1 = new myMethodDelegate( mySC.myStringMethod
 );
      myMethodDelegate myD2 = new myMethodDelegate( mySampleClass.mySignMethod
 );

      // Invokes the delegates.
      Console.WriteLine( "{0} is {1}; use the sign \"{2}\".",
 5, myD1( 5 ), myD2( 5 ) );
      Console.WriteLine( "{0} is {1}; use the sign \"{2}\".",
 -3, myD1( -3 ), myD2( -3 ) );
      Console.WriteLine( "{0} is {1}; use the sign \"{2}\".",
 0, myD1( 0 ), myD2( 0 ) );
   }

}


/*
This code produces the following output:
 
5 is positive; use the sign "+".
-3 is negative; use the sign "-".
0 is zero; use the sign "".
*/ 

using namespace System;
delegate String^ myMethodDelegate( // Declares a delegate for a method
 that takes in an int and returns a String.
int myInt );

// Defines some methods to which the delegate can point.
ref class mySampleClass
{
public:

   // Defines an instance method.
   String^ myStringMethod( int myInt )
   {
      if ( myInt > 0 )
            return ("positive");

      if ( myInt < 0 )
            return ("negative");

      return ("zero");
   }


   // Defines a static method.
   static String^ mySignMethod( int myInt )
   {
      if ( myInt > 0 )
            return ("+");

      if ( myInt < 0 )
            return ("-");

      return ("");
   }

};

int main()
{
   
   // Creates one delegate for each method.
   mySampleClass^ mySC = gcnew mySampleClass;
   myMethodDelegate^ myD1 = gcnew myMethodDelegate( mySC, &mySampleClass::myStringMethod
 );
   myMethodDelegate^ myD2 = gcnew myMethodDelegate( mySampleClass::mySignMethod );
   
   // Invokes the delegates.
   Console::WriteLine( "{0} is {1}; use the sign \"{2}\".", 5,
 myD1( 5 ), myD2( 5 ) );
   Console::WriteLine( "{0} is {1}; use the sign \"{2}\".", 
 -3, myD1(  -3 ), myD2(  -3 ) );
   Console::WriteLine( "{0} is {1}; use the sign \"{2}\".", 0,
 myD1( 0 ), myD2( 0 ) );
}

/*
This code produces the following output:

5 is positive; use the sign "+".
-3 is negative; use the sign "-".
0 is zero; use the sign "".
*/
import System.*;

public class SamplesDelegate
{
    /** @delegate 
     */
    // Declares a delegate for a method that takes in an int and returns
    // a String.
    public delegate String MyMethodDelegate(int
 myInt);

    // Defines some methods to which the delegate can point.
    public static class
 MySampleClass
    {
        // Defines an instance method.
        public String MyStringMethod(int myInt)
        {
            if (myInt > 0)  {
                return "positive";
            }
            if (myInt < 0) {
                return "negative";
            }
            return "zero";
        } //myStringMethod

        // Defines a static method.
        public static String MySignMethod(int
 myInt)
        {
            if (myInt > 0) {
                return "+";
            }
            if (myInt < 0) {
                return "-";
            }
            return "";
        } //MySignMethod
    } //MySampleClass

    public static void main(String[]
 args)
    {
        // Creates one delegate for each method.
        MySampleClass mySC = new MySampleClass();
        MyMethodDelegate myD1 = new MyMethodDelegate(mySC.MyStringMethod);
        MyMethodDelegate myD2 = new MyMethodDelegate(MySampleClass.MySignMethod);
        // Invokes the delegates.
        Console.WriteLine("{0} is {1}; use the sign \"{2}\"."
,
 
            (Int32)(5), System.Convert.ToString(myD1.Invoke(5)), 
            System.Convert.ToString(myD2.Invoke(5)));
        Console.WriteLine("{0} is {1}; use the sign \"{2}\"."
,
            System.Convert.ToString(-3), System.Convert.ToString(myD1.Invoke(-3))
,
            System.Convert.ToString(myD2.Invoke(-3)));
        Console.WriteLine("{0} is {1}; use the sign \"{2}\"."
,
 (Int32)(0),
            System.Convert.ToString(myD1.Invoke(0)), System.Convert.ToString(
            myD2.Invoke(0)));
    } //main
} //SamplesDelegate 

/*
This code produces the following output:
 
5 is positive; use the sign "+".
-3 is negative; use the sign "-".
0 is zero; use the sign "".
*/

継承階層継承階層
System.Object
  System.Delegate
     System.MulticastDelegate
スレッド セーフスレッド セーフ
この型の public static (Visual Basic では Shared) メンバはすべて、スレッド セーフです。インスタンス メンバ場合は、スレッド セーフであるとは限りません。
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照

Delegate コンストラクタ (Object, String)

指定したインスタンス メソッド指定クラス インスタンスに対して呼び出すデリゲート初期化します。

名前空間: System
アセンブリ: mscorlib (mscorlib.dll 内)
構文構文

例外例外
例外種類条件

ArgumentNullException

targetnull 参照 (Visual Basic では Nothing) です。

または

methodnull 参照 (Visual Basic では Nothing) です。

ArgumentException

呼び出し先のメソッドバインドするときにエラー発生しました

解説解説
.NET Framework のセキュリティ.NET Frameworkセキュリティ
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照

Delegate コンストラクタ (Type, String)

指定したクラスから指定静的メソッド呼び出すデリゲート初期化します。

名前空間: System
アセンブリ: mscorlib (mscorlib.dll 内)
構文構文

例外例外
例外種類条件

ArgumentNullException

targetnull 参照 (Visual Basic では Nothing) です。

または

methodnull 参照 (Visual Basic では Nothing) です。

ArgumentException

targetRuntimeType ではありません。詳細については、リフレクションランタイム型 のトピック参照してください

または

targetオープン ジェネリック型です。

解説解説

このコンストラクタは、静的メソッドの名前とそのメソッド定義するクラスを表す Type基づいてデリゲート作成するために、コンパイラ生成したデリゲート型によって呼び出されます。

このコンストラクタは、静的メソッドデリゲートだけを作成しますインスタンス メソッドとは、クラスインスタンス関連付けられるメソッドです。静的メソッドとは、クラス自体関連付けられるメソッドです。

クラスを表す Type取得するには、そのクラスの (名前空間を含む) 完全限定名で Type.GetType メソッド使用します。たとえば、"System.Threading.ThreadStart" を Type.GetType に渡すと、ThreadStart クラスType返されます。

.NET Framework のセキュリティ.NET Frameworkセキュリティ
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照

Delegate コンストラクタ


Delegate プロパティ


Delegate メソッド


パブリック メソッドパブリック メソッド

( プロテクト メソッド参照)
  名前 説明
パブリック メソッド Clone デリゲート簡易コピー作成します
パブリック メソッド Combine オーバーロードされます指定したマルチキャスト (組み合わせ可能) デリゲート呼び出しリスト連結します。
パブリック メソッド CreateDelegate オーバーロードされます指定した型のデリゲート作成します
パブリック メソッド DynamicInvoke 現在のデリゲートが表すメソッド動的に呼び出します (遅延バインディング)。
パブリック メソッド Equals オーバーロードされますオーバーライドされます。  
パブリック メソッド GetHashCode オーバーライドされますデリゲートハッシュ コード返します
パブリック メソッド GetInvocationList デリゲート呼び出しリスト返します
パブリック メソッド GetObjectData サポートされていません。
パブリック メソッド GetType  現在のインスタンスType取得します。 ( Object から継承されます。)
パブリック メソッド op_Equality 指定したデリゲート等しかどうか判断します
パブリック メソッド op_Inequality 指定したデリゲート等しくないかどうか判断します
パブリック メソッド ReferenceEquals  指定した複数Object インスタンス同一かどうか判断します。 ( Object から継承されます。)
パブリック メソッド Remove 一方デリゲート呼び出しリストから、最後に出現した他方デリゲート呼び出しリスト削除します
パブリック メソッド RemoveAll 一方デリゲート呼び出しリストから、そこに出現する他方デリゲート呼び出しリストをすべて削除します
パブリック メソッド ToString  現在の Object を表す String返します。 ( Object から継承されます。)
プロテクト メソッドプロテクト メソッド
参照参照

関連項目

Delegate クラス
System 名前空間
MulticastDelegate

その他の技術情報

同期メソッド非同期呼び出し

Delegate メンバ

静的メソッドまたはクラス インスタンスとそのクラスインスタンス メソッド参照するデータ構造体であるデリゲート表します

Delegate データ型公開されるメンバを以下の表に示します


プロテクト コンストラクタプロテクト コンストラクタ
パブリック プロパティパブリック プロパティ
パブリック メソッドパブリック メソッド
( プロテクト メソッド参照)
  名前 説明
パブリック メソッド Clone デリゲート簡易コピー作成します
パブリック メソッド Combine オーバーロードされます指定したマルチキャスト (組み合わせ可能) デリゲート呼び出しリスト連結します。
パブリック メソッド CreateDelegate オーバーロードされます指定した型のデリゲート作成します
パブリック メソッド DynamicInvoke 現在のデリゲートが表すメソッド動的に呼び出します (遅延バインディング)。
パブリック メソッド Equals オーバーロードされますオーバーライドされます。  
パブリック メソッド GetHashCode オーバーライドされますデリゲートハッシュ コード返します
パブリック メソッド GetInvocationList デリゲート呼び出しリスト返します
パブリック メソッド GetObjectData サポートされていません。
パブリック メソッド GetType  現在のインスタンスType取得します。 (Object から継承されます。)
パブリック メソッド op_Equality 指定したデリゲート等しかどうか判断します
パブリック メソッド op_Inequality 指定したデリゲート等しくないかどうか判断します
パブリック メソッド ReferenceEquals  指定した複数Object インスタンス同一かどうか判断します。 (Object から継承されます。)
パブリック メソッド Remove 一方デリゲート呼び出しリストから、最後に出現した他方デリゲート呼び出しリスト削除します
パブリック メソッド RemoveAll 一方デリゲート呼び出しリストから、そこに出現する他方デリゲート呼び出しリストをすべて削除します
パブリック メソッド ToString  現在の Object を表す String返します。 (Object から継承されます。)
プロテクト メソッドプロテクト メソッド
参照参照

関連項目

Delegate クラス
System 名前空間
MulticastDelegate

その他の技術情報

同期メソッド非同期呼び出し




固有名詞の分類

このページでは「.NET Framework クラス ライブラリ リファレンス」からDeleGateを検索した結果を表示しています。
Weblioに収録されているすべての辞書からDeleGateを検索する場合は、下記のリンクをクリックしてください。
 全ての辞書からDeleGate を検索

英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「DeleGate」の関連用語

DeleGateのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



DeleGateのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2025 Microsoft.All rights reserved.

©2025 GRAS Group, Inc.RSS