精华内容
下载资源
问答
  • Delegate

    2019-10-02 23:04:00
    在C#中,事件的实现依赖于delegate,因此我们有必要先了解一下delegate的概念。 一、Delegate概念介绍 delegate是C#中的一种类型,它实际上是一个能够持有对某个方法的引用的类。与其它的类不同,delegate类...
    在C#中,事件的实现依赖于delegate,因此我们有必要先了解一下delegate的概念。 

    一、Delegate 概念介绍

    delegate是C#中的一种类型,它实际上是一个能够持有对某个方法的引用的类。与其它的类不同,delegate类能够拥有一个签名(signature),并且它只能持有与它的签名相匹配的方法的引用。它所实现的功能与C/C++中的函数指针十分相似。它允许你传递一个类A的方法m 给另一个类B的对象,使得类B的对象能够调用这个方法m。但与函数指针相比,delegate有许多函数指针不具备的优点。首先,函数指针只能指向静态函数,而delegate既可以引用静态函数,又可以引用非静态成员函数。在引用非静态成员函数时,delegate不但保存了对此函数入口指针的引用,而且还保存了调用此函数的类实例的引用。其次,与函数指针相比,delegate是面向对象、类型安全、可靠的受控(managed)对象。也就是说, runtime能够保证delegate指向一个有效的方法,你无须担心delegate会指向无效地址或者越界地址。 

    二、实现delegate的步骤:
    实现一个delegate是很简单的,通过以下3个步骤即可实现一个delegate: 
    1. 声明一个delegate对象,它应当与你想要传递的方法具有相同的参数和返回值类型。 
    2. 创建delegate对象,并将你想要传递的函数作为参数传入。 
    3. 在要实现异步调用的地方,通过上一步创建的对象来调用方法。 

    三、实例说明
    下面是一个简单的例子: 
    using System; 
    public class MyDelegateTest 

    // 步骤1,声明delegate对象 
    public delegate void MyDelegate(string name); 
    // 这是我们欲传递的方法,它与MyDelegate具有相同的参数和返回值类型 
    public static void MyDelegateFunc(string name) 

    Console.WriteLine("Hello, {0}", name); 


    public static void Main() 

    // 步骤2,创建delegate对象 
    MyDelegate md = new MyDelegate(MyDelegateTest.MyDelegateFunc); 
    // 步骤3,调用delegate 
    md("sam1111"); 


    输出结果是:Hello, sam1111
    --------------------------------------------------------------------------
    namespace CommunityServer
    {
        
    public class CSHttpModule : IHttpModule
        {
    private void Application_BeginRequest(Object source, EventArgs e)
            {
              
    //省略以上代码
                CSContext.Create(context, new UrlReWriterDelegate(ReWriteUrl));
            }
    private bool ReWriteUrl(HttpContext context)
            {
               
    return false;
            }
    }
    }

    namespace CommunityServer.Components 
    {
        
    public delegate bool UrlReWriterDelegate(HttpContext context);

        
    public sealed class CSContext 
        {
    public static CSContext Create(HttpContext context, UrlReWriterDelegate rewriter)
            {
                CSContext csContext 
    = new CSContext(context,false);
                SaveContextToStore(csContext);
                csContext.IsUrlReWritten 
    = rewriter(context);
                csContext._queryString 
    = new NameValueCollection(context.Request.QueryString);
                
    return csContext;
            }       
    }
    }

    转载于:https://www.cnblogs.com/Elong/archive/2007/10/24/936475.html

    展开全文
  • delegate

    2016-09-03 05:42:26
    下面这个链接解决了我一直对delegating和delegated的疑问,不知道谁是谁。...The delegating object is typically a framework object, and the delegate is typically a custom controller object. In a man

    下面这个链接解决了我一直对delegating和delegated的疑问,不知道谁是谁。

    Delegation and the Cocoa Frameworks
    The delegating object is typically a framework object, and the delegate is typically a custom controller object. In a managed memory environment, the delegating object maintains a weak reference to its delegate; in a garbage-collected environment, the receiver maintains a strong reference to its delegate. Examples of delegation abound in the Foundation, UIKit, AppKit, and other Cocoa and Cocoa Touch frameworks.

    https://developer.apple.com/library/mac/documentation/General/Conceptual/DevPedia-CocoaCore/Delegation.html

    展开全文
  • C# Delegate讲解

    2017-12-15 17:59:07
    C# Delegate讲解C# Delegate讲解C# Delegate讲解C# Delegate讲解
  • Delegate 理解

    2019-08-02 18:58:12
    Delegate 理解 以前对Delegate 和Event 的理解都是一知半解,只知道其用法而不明白里面真正的奥秘。前段时间在网上看到一篇文章关于Delegate 和 Event的,对理解Delegate很有帮助。Delegate 可以理解...

    以前对Delegate 和Event 的理解都是一知半解,只知道其用法而不明白里面真正的奥秘。前段时间在网上看到一篇文章关于Delegate 和 Event的,对理解Delegate很有帮助。

    Delegate 可以理解为函数的接口,定义了函数参数和返回值的样板,也限定了函数的定义格式。

     

     

     

    posted on 2011-10-11 21:42 Alan Gan 阅读(...) 评论(...) 编辑 收藏

    转载于:https://www.cnblogs.com/AlanGan/archive/2011/10/11/2207800.html

    展开全文
  • C# Delegate & DelegateChain

    2018-09-19 14:38:07
    Delegate Introduction Demo1 Delegate using System; using System.Collections.Generic; using System.Text; namespace ConsoleDelegate { class DelegateDemo { //申明一个返回类型是void,有一个String...

    Delegate Introduction

    Demo1 Delegate

    using System;
    using System.Collections.Generic;
    using System.Text;
    
    namespace ConsoleDelegate
    {
        class DelegateDemo
        {
            //申明一个返回类型是void,有一个String类型参数的delegete类。 
            public delegate void GreetingDelegate(string name);
    
            //定义一个方法,该方法的第一个参数是delegate的参数。第二个参数为函数。
            //该方法实现了将函数作为参数。
            public void Greeting(string name,GreetingDelegate callback)
            {
                callback.Invoke(name);
            }
    
            public void EnglishGreeting(string name)
            {
                Console.WriteLine("Hello," + name);
            }
            public void ChineseGreeting(string name)
            {
                Console.WriteLine("你好," + name);
            }
    
            static void Main(string[] args)
            {
                DelegateDemo p = new DelegateDemo();
                //第一个参数为EnglishGreeting的参数值,第二个参数将EnglishGreeting函数变为参数.
                p.Greeting("Daniel", p.EnglishGreeting);
                p.Greeting("阿甘", p.ChineseGreeting);
                Console.Read();
            }
        }
    }
    

    Demo2 DelegateChain

    using System;
    
    namespace DelegateChain
    {
        class Program
        {
            static void Main(string[] args)
            {
                //一个委托对应多个类型相同的方法
                var m1 = new DelegateDemo(method1);
                var m2 = new DelegateDemo(method2);
    
                //定义委托对象,不包含方法。
                DelegateDemo delegateChain = null;
                //向委托对象中添加委托,添加多个委托,则形成委托链。
                delegateChain += m1;//Add m1
                delegateChain += m2;
                delegateChain -= m1;//Remove m1
    
                delegateChain();//调用委托链
                Console.Read();
            }
            private static void method1()
            {
                Console.WriteLine("method1");
            }
            private static void method2()
            {
                Console.WriteLine("method2");
            }
    
            public delegate void DelegateDemo();
    
            
        }
    }
    

     

    展开全文
  • c# delegate

    2019-10-03 02:40:36
    C# version 1.0 delegate // Declare delegate type PerformCalculator public delegate int PerformCalculator(int x, int y); public class SampleClass { private int Add(int x, int y) { ...
  • Delegate详解

    2020-03-16 17:44:32
    @protocol name<NSObject> @end 修饰符 @optional 可选择实现 @required 必须实现 @property (nonatomic, weak) id<... delegate;...if([_delegate respondsToSelector:@seletor(method)]...[_delegate method]...
  • delegate介绍

    2020-10-22 17:39:41
    delegate介绍 delegation委托其实也是一种架构设计模式,主要是由一个委托对象托给另一个对象去做它的工作。这里面需要用protocol协议实现,协议由requested必要方法,和option可选方法两种,协议提供编程接口,给...
  • Forward UITextfield Delegate

    2021-01-08 11:01:22
    <div><p>I have added an optional delegate to QEntryTableViewCell called "ForwardedUITextFieldDelegate" this enhancement will allow controllers other than QEntryTableViewCell to respond to ...
  • C# 委托(Delegate

    2021-01-03 03:55:48
    C# 委托(Delegate) C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针。委托(Delegate) 是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变。 委托(Delegate)特别用于实现事件和回调方法。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 41,876
精华内容 16,750
关键字:

delegate