C#依頼、イベントとコールバック関数


.Net          ,         。   ASP.NET  WINFrom   ,    (Load),  (Paint),   (Init)  。
“protected void Page_Load(object sender, EventArgs e)”             。         ,            “object sender, EventArgs e”     。            ?

 、  (         )

      ?                   ,     ,        ASP.NET  , JS      ,                 JS  。     ,                。            ?        !             ,  ,        。

 C# ,           :           ,                    。             JS    。              ,                (      ),           ,           ,  ,            。

1、     

            ?  ,       ,      (    ),       。  :
delegate string/*    */ ProcessDelegate(int i);
          。             ,          ,            ,        , ()        。     ,              ,  ,              :
1、              ,   string  ;
2、         ,   int  。
OK,        ,        :)
例:
 1 
using
 System;
 2 
using
 System.Collections.Generic;
 3 
using
 System.Text;
 4 
 5 
namespace
 TestApp
 6 
{
 7 
    
///
 

 8 
    
///
依頼
 9 
    
///
 

10 
    
///
 

11 
    
///
 

12 
    
///
 

13 
    
public
 
delegate
 
string
 ProcessDelegate(
string
 s1, 
string
 s2);
14 
15 
    
class
 Program
16 
    {
17 
        
static
 
void
 Main(
string
[] args)
18 
        {
19 
            
/*
呼び出し方法
*/
20 
            ProcessDelegate pd 
=
 
new
 ProcessDelegate(
new
 Test().Process);
21 
            Console.WriteLine(pd(
"
Text1
"

"
Text2
"
));
22 
        }
23 
    }
24 
25 
    
public
 
class
 Test
26 
    {
27 
        
///
 

28 
        
///
方法
29 
        
///
 

30 
        
///
 

31 
        
///
 

32 
        
///
 

33 
        
public
 
string
 Process(
string
 s1,
string
 s2)
34 
        {
35 
            
return
 s1 
+
 s2;
36 
        }
37 
    }
38 
}
 
      :
Text1Tex2


2、    

     ,           ,       :
 
using
 System;
using
 System.Collections.Generic;
using
 System.Text;
namespace
 TestApp{    
///
 

    
///
依頼
///
 

    
///
 

    
///
 

    
///
 

    
public
 
delegate
 
string
 ProcessDelegate
<
T,S
>
(T s1, S s2);    
class
 Program    {        
static
 
void
 Main(
string
[] args)        {            
/*
呼び出し方法
*/
            ProcessDelegate
<
string
,
int
>
 pd 
=
 
new
 ProcessDelegate
<
string
,
int
>
(
new
 Test().Process);            Console.WriteLine(pd(
"
Text1
"

100
));        }    }    
public
 
class
 Test    {        
///
 

        
///
方法
///
 

        
///
 

        
///
 

        
///
 

        
public
 
string
 Process(
string
 s1,
int
 s2)        {            
return
 s1 
+
 s2;        }    }}
 
       :
Text1100

                 ,       。

 、  

        ,                 。  ,         ,    ,               。       。                       ,           ,     。     ,         ,    。

 C# ,        event。  :
event ProcessDelegate ProcessEvent;

              :
 
using
 System;
using
 System.Collections.Generic;
using
 System.Text;
namespace
 TestApp{    
///
 

    
///
依頼
///
 

    
///
 

    
///
 

    
///
 

    
public
 
delegate
 
void
 ProcessDelegate(
object
 sender, EventArgs e);    
class
 Program    {                
static
 
void
 Main(
string
[] args)        {            
/*
ステップ1
*/
            Test t 
=
 
new
 Test();            
/*
関連イベントのメソッドは、依頼人を見つけたことに相当します.
*/
            t.ProcessEvent 
+=
 
new
 ProcessDelegate(t_ProcessEvent);            
/*
アクセスメソッド
*/
            Console.WriteLine(t.Process());             Console.Read();        }        
static
 
void
 t_ProcessEvent(
object
 sender, EventArgs e)        {            Test t 
=
 (Test)sender;            t.Text1 
=
 
"
Hello
"
;            t.Text2 
=
 
"
World
"
;        }    }    
public
 
class
 Test    {        
private
 
string
 s1;        
public
 
string
 Text1        {            
get
 { 
return
 s1; }            
set
 { s1 
=
 value; }        }        
private
 
string
 s2;        
public
 
string
 Text2        {            
get
 { 
return
 s2; }            
set
 { s2 
=
 value; }        }        
public
 
event
 ProcessDelegate ProcessEvent;        
void
 ProcessAction(
object
 sender, EventArgs e)        {            
if
 (ProcessEvent 
==
 
null
)                ProcessEvent 
+=
 
new
 ProcessDelegate(t_ProcessEvent);            ProcessEvent(sender, e);        }        
//
独自の関連メソッドが指定されていない場合は、メソッドを呼び出してエラーが放出されます.
        
void
 t_ProcessEvent(
object
 sender, EventArgs e)        {            
throw
 
new
 Exception(
"
The method or operation is not implemented.
"
);        }        
void
 OnProcess()        {            ProcessAction(
this
, EventArgs.Empty);        }        
public
 
string
 Process()        {            OnProcess();            
return
 s1 
+
 s2;        }    }} 
 
      ?            ,               (        )   ,   Process  。          。

 、    

      ,   !

                       。 C#       ,         。       :
 
using
 System;
using
 System.Collections.Generic;
using
 System.Text;
namespace
 TestApp{    
///
 

    
///
依頼
///
 

    
///
 

    
///
 

    
///
 

    
public
 
delegate
 
string
 ProcessDelegate(
string
 s1, 
string
 s2);    
class
 Program    {        
static
 
void
 Main(
string
[] args)        {            
/*
呼び出し方法
*/
            Test t 
=
 
new
 Test();            
string
 r1 
=
 t.Process(
"
Text1
"

"
Text2
"

new
 ProcessDelegate(t.Process1));            
string
 r2 
=
 t.Process(
"
Text1
"

"
Text2
"

new
 ProcessDelegate(t.Process2));            
string
 r3 
=
 t.Process(
"
Text1
"

"
Text2
"

new
 ProcessDelegate(t.Process3));            Console.WriteLine(r1);            Console.WriteLine(r2);            Console.WriteLine(r3);        }    }    
public
 
class
 Test    {        
public
 
string
 Process(
string
 s1,
string
 s2,ProcessDelegate process)        {            
return
 process(s1, s2);        }        
public
 
string
 Process1(
string
 s1, 
string
 s2)        {            
return
 s1 
+
 s2;        }        
public
 
string
 Process2(
string
 s1, 
string
 s2)        {            
return
 s1 
+
 Environment.NewLine 
+
 s2;        }        
public
 
string
 Process3(
string
 s1, 
string
 s2)        {            
return
 s2 
+
 s1;        }    }}
 
    :
Text1Text2
Text1
Text2
Text2Text1

Process           ,            。    ,                    ,              。                   ,               。