精华内容
下载资源
问答
  • C#中委托

    2018-01-03 10:54:42
    声明delegate委托:delegate void intTeat(int X) 声明action委托: 包含多个方法,为多播委托,返回为void,用Action  static void Main()  {  Actiondouble> operations = Mathoperati

    常用的有delegate,Action<T>,Func<T>

    声明delegate委托:delegate void intTeat(int X)

    声明action<T>委托:

    包含多个方法,为多播委托,返回为void,用Action<>
            static void Main()
            {
               Action<double> operations = Mathoperations.Mult ;

              operations+=Mathoperations.Square

            }

    声明Function<T>委托:

    每个方法只包含一个方法的调用,用Func<>或Action<>
            Func<double, double>[] func=
                {
              //委托Func<in A,Out AResult> 
            };
            public void number(Func<double,double> func,double result)
            {
                //Func<>作为参数
            }


    func<T>和action<T>的区别:

    Func<in X,OUT S>即func<>方法参数有输入值X,也有返回值S,例如 Func<T1,T2,T3,,,T8,T9>(T1 t1, T2 t2, T3 t3,,,T8,T9 result),  其中T9为返回值类型

    Action<int X>即actio<>方法参数只有输入值X,例如  Action<T1,T2,T3,,,T8>(T1 t1, T2 t2, T3 t3,,,T8);最多8个参数

    展开全文
  • C#中委托用法

    2020-09-03 16:41:12
    主要介绍了C#中委托用法,实例分析了C#的定义与使用技巧,需要的朋友可以参考下
  • 主要介绍了C#中委托用法,以实例形式较为详细的分析了C#中委托的概念与使用技巧,需要的朋友可以参考下
  • 主要介绍了C#中委托用法,较为详细的分析了C#中委托的概念与相关的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
  • 主要介绍了C#中委托的进一步理解,本文讲解了委托类型、建立委托链、移除委托链等内容,需要的朋友可以参考下
  • c#中委托的理解

    2020-09-05 12:37:12
    本篇文章,小编将为大家介绍关于对c#中委托的理解,有需要的朋友可以参考一下
  • 主要介绍了C#中委托的基本概念介绍,本文讲解了委托的使用、委托类型和委托实例、委托的合并和删除、委托是不易变的、委托调用列表、GetInvocationList等内容,需要的朋友可以参考下
  • 以下是对C#中委托的基本用法进行了详细的总结分析,需要的朋友可以过来参考下。希望对大家有所帮助
  • 主要介绍了C#中委托和事件在观察者模式中的应用,需要的朋友可以参考下
  • 主要介绍了C#中委托和事件的区别,并分别以实例形式展示了通过委托执行方法与通过事件执行方法,以及相关的执行流程与原理分析,需要的朋友可以参考下
  • 主要为大家详细介绍了C#中委托(Delegates)的使用方法,感兴趣的朋友可以参考一下
  • C# 中委托的演变

    2019-05-20 15:28:33
    C# 中委托的演变 C# 1.0 中,通过使用在代码中其他位置定义的方法显式初始化委托来创建委托的实例。 C# 2.0 引入了匿名方法的概念,作为一种编写可在委托调用中执行的未命名内联语句块的方式。 C# 3.0 引入了 ...

    C# 中委托的演变

     C# 1.0 中,通过使用在代码中其他位置定义的方法显式初始化委托来创建委托的实例。 

    C# 2.0 引入了匿名方法的概念,作为一种编写可在委托调用中执行的未命名内联语句块的方式。

     C# 3.0 引入了 lambda 表达式,这种表达式与匿名方法的概念类似,但更具表现力并且更简练。 这两个功能统称为匿名函数。 通常,面向 .NET Framework 3.5 及更高版本的应用程序应使用 lambda 表达式。

    下面的示例演示从 C# 1.0 到 C# 3.0 委托创建过程的发展:

    C#复制

    class Test
    {
        delegate void TestDelegate(string s);
        static void M(string s)
        {
            Console.WriteLine(s);
        }
    
        static void Main(string[] args)
        {
            // Original delegate syntax required 
            // initialization with a named method.
            TestDelegate testDelA = new TestDelegate(M);
    
            // C# 2.0: A delegate can be initialized with
            // inline code, called an "anonymous method." This
            // method takes a string as an input parameter.
            TestDelegate testDelB = delegate(string s) { Console.WriteLine(s); };
    
            // C# 3.0. A delegate can be initialized with
            // a lambda expression. The lambda also takes a string
            // as an input parameter (x). The type of x is inferred by the compiler.
            TestDelegate testDelC = (x) => { Console.WriteLine(x); };
    
            // Invoke the delegates.
            testDelA("Hello. My name is M and I write lines.");
            testDelB("That's nothing. I'm anonymous and ");
            testDelC("I'm a famous author.");
    
            // Keep console window open in debug mode.
            Console.WriteLine("Press any key to exit.");
            Console.ReadKey();
        }
    }
    /* Output:
        Hello. My name is M and I write lines.
        That's nothing. I'm anonymous and
        I'm a famous author.
        Press any key to exit.
     */
    展开全文
  • 主要介绍了C#中委托的+=和-=深入研究,本文深入研究+=和-=在执行时都做了哪些事情,加深对C#委托的理解和使用,需要的朋友可以参考下
  • 主要介绍了详解C#中委托,事件与回调函数讲解,小编觉得挺不错的,现在就分享给大家,也给大家做个参考。
  • c#中委托的使用

    千次阅读 2015-06-08 15:20:18
    这篇文章主要介绍了C#中委托的用法,包括委托的功能、定义及用法示例,需要的朋友可以参考下 本文以实例形式简单介绍了C#中委托的用法,是深入学习C#程序设计所必须掌握的重要技巧。现以教程形式分享给大家供...
    这篇文章主要介绍了C#中委托和事件的区别,并分别以实例形式展示了通过委托执行方法与通过事件执行方法,以及相关的执行流程与原理分析,需要的朋友可以参考下

    本文实例分析了C#中委托和事件的区别,分享给大家供大家参考之用。具体如下:

    大致来说,委托是一个类,该类内部维护着一个字段,指向一个方法。事件可以被看作一个委托类型的变量,通过事件注册、取消多个委托或方法。本篇分别通过委托和事件执行多个方法,从中体会两者的区别。

    一、通过委托执行方法

    class Program
    {
        static void Main(string[] args)
        {
          Example example = new Example();
          example.Go();
          Console.ReadKey();
        }
    }
    public class Example
    {
        public delegate void DoSth(string str);
        internal void Go()
        {
          //声明一个委托变量,并把已知方法作为其构造函数的参数
          DoSth d = new DoSth(Print);
          string str = "Hello,World";
          //通过委托的静态方法Invoke触发委托
          d.Invoke(str);
        }
        void Print(string str)
        {
          Console.WriteLine(str);
        }
    }
    
    

    上述代码实现:

    ① 在CLR运行时,委托DoSth实际上就一个类,该类有一个参数类型为方法的构造函数,并且提供了一个Invoke实例方法,用来触发委托的执行。
    ② 委托DoSth定义了方法的参数和返回类型
    ③ 通过委托DoSth的构造函数,可以把符合定义的方法赋值给委托
    ④ 调用委托的实例方法Invoke执行了方法

    但实际上让委托执行方法还有另外一种方式,那就是:委托变量(参数列表)

    public class Example
    {
        public delegate void DoSth(object sender, EventArgs e);
        internal void Go()
        {
          //声明一个委托变量,并把已知方法作为其构造函数的参数
          DoSth d = new DoSth(Print);
          object sender = 10;
          EventArgs e = new EventArgs();
          d(sender, e);
        }
        void Print(object sender, EventArgs e)
        {
          Console.WriteLine(sender);
        }
    }
    
    

    上述代码实现:

    ① 委托DoSth的参数列表和方法Print的参数列表还是保持一致
    ② 委托DoSth中的参数object sender通常用来表示动作的发起者,EventArgs e用来表示动作所带的参数。

    而实际上,委托变量(参数列表),事件就是采用这种形式执行方法的。

    二、通过事件执行方法

    public class Example
    {
        public delegate void DoSth(object sender, EventArgs e);
        public event DoSth myDoSth;
        internal void Go()
        {
          //声明一个委托变量,并把已知方法作为其构造函数的参数
          DoSth d = new DoSth(Print);
          object sender = 10;
          EventArgs e = new EventArgs();
          myDoSth += new DoSth(d);
          myDoSth(sender, e);
        }
        void Print(object sender, EventArgs e)
        {
          Console.WriteLine(sender);
        }
    }
    
    

    上述代码实现:

    ① 声明了事件myDoSth,事件的类型是DoSth这个委托
    ② 通过+=为事件注册委托
    ③ 通过DoSth委托的构造函数为事件注册委托实例
    ④ 采用委托变量(参数列表)这种形式,让事件执行方法

    而且,通过+=还可以为事件注册多个委托。

    public class Example
    {
        public delegate void DoSth(object sender, EventArgs e);
        public event DoSth myDoSth;
        internal void Go()
        {
          //声明一个委托变量,并把已知方法作为其构造函数的参数
          DoSth d = new DoSth(Print);
          DoSth d1 = new DoSth(Say);
          object sender = 10;
          EventArgs e = new EventArgs();
          //为事件注册多个委托
          myDoSth += new DoSth(d);
          myDoSth += new DoSth(d1);
          myDoSth(sender, e);
        }
        void Print(object sender, EventArgs e)
        {
          Console.WriteLine(sender);
        }
        void Say(object sender, EventArgs e)
        {
          Console.WriteLine(sender);
        }
    }
    
    

    以上,通过+=为事件注册1个或多个委托实例,实际上,还可以为事件直接注册方法。

    public class Example
    {
        public delegate void DoSth(object sender, EventArgs e);
        public event DoSth myDoSth;
        internal void Go()
        {
          object sender = 10;
          EventArgs e = new EventArgs();
          //为事件注册多个委托
          myDoSth += Print;
          myDoSth += Say;
          myDoSth(sender, e);
        }
        void Print(object sender, EventArgs e)
        {
          Console.WriteLine(sender);
        }
        void Say(object sender, EventArgs e)
        {
          Console.WriteLine(sender);
        }
    }  
     

    三、通过EventHandler执行方法

    先来看EventHandler的源代码。

    public delegate void EventHandler(object sender, System.EventArgs e);
    
    

    可见,EventHandler就是委托。现在就使用EventHandler来执行多个方法。

    public class Example
    {
        public event EventHandler myEvent;
        internal void Go()
        {
          object sender = 10;
          EventArgs e = new EventArgs();
          //为事件注册多个委托
          myEvent += Print;
          myEvent += Say;
          myEvent(sender, e);
        }
        void Print(object sender, EventArgs e)
        {
          Console.WriteLine(sender);
        }
        void Say(object sender, EventArgs e)
        {
          Console.WriteLine(sender);
        }
    }
    
    

    总结:

    ① 委托就是一个类,也可以实例化,通过委托的构造函数来把方法赋值给委托实例
    ② 触发委托有2种方式: 委托实例.Invoke(参数列表),委托实例(参数列表)
    ③ 事件可以看作是一个委托类型的变量
    ④ 通过+=为事件注册多个委托实例或多个方法
    ⑤ 通过-=为事件注销多个委托实例或多个方法
    ⑥ EventHandler就是一个委托

    转载:http://www.jb51.net/article/55098.htm

    展开全文
  • 本篇文章是对C#中委托的同步调用与异步调用进行了详细的分析介绍,需要的朋友参考下
  • C#中委托和事件的理解使用 委托和事件的说明: (1)C#中事件:事件是属于类的成员,所以要放在类的内部。 (2)委托属于一个定义,是和类、接口类似的,通常放在外部。 Preproc.cs public class Preproc { //数据...

    C#中委托和事件的理解使用

    委托和事件的说明:
    (1)C#中事件:事件是属于类的成员,所以要放在类的内部。
    (2)委托属于一个定义,是和类、接口类似的,通常放在外部。
    Preproc.cs
    public class Preproc
    {
    //数据处理事件
    EventHandler FirstConnectionEventHandler;

    public Preproc()//构造函数
    {
    //关联事件
    FirstConnectionEventHandler = new EventHandler(AddIpToList);

    }

    //将事件添加到事件队列中
    gd.FirstConnectionHandlesEvent += FirstConnectionEventHandler;

    //事件处理方法
    protected virtual void AddIpToList(object sender, S7ClientEventArgs e)
    {
    List list1 = (List)e.Data;

            TraceData trda = new TraceData();
    
            foreach (TraceData sd in list1)
            {
                trda.data.IP = sd.data.IP;
                trda.data.Rack = sd.data.Rack;
                trda.data.Slot = sd.data.Slot;
                trda.siemensPLCSelected = sd.siemensPLCSelected;
            }
            list.Add(trda);
    
            //logger.Info("Sig recv\t\t"+ list.Count.ToString());
        }
    

    GatherData.cs
    ///
    /// 一次连接中途断开的处理事件
    ///
    public event EventHandler FirstConnectionHandlesEvent;

        protected virtual void FirstConnectionEvent(List<TraceData> pkgList)
        {
            EventHandler<S7ClientEventArgs> temp = FirstConnectionHandlesEvent;
            if (temp != null) temp(this, new S7ClientEventArgs(pkgList));
        }
    

    //事件触发
    if (!PingIpOrDomainName(sv.Address))
    {
    TraceData trda = new TraceData();
    trda.data.IP = sv.Address;
    trda.data.Rack = GetRack;
    trda.data.Slot = GetSlot;
    trda.siemensPLCSelected = GetsiemensPLCS;
    handlerlist.Add(trda);
    FirstConnectionEvent(handlerlist);
    }

    展开全文
  • 匿名函数(C# 编程指南) 匿名函数是一个“内联”语句或表达式,可在需要委托类型的任何地方使用。可以使用匿名函数来初始化命名委托,...C# 中委托的发展 下面的示例演示从 C# 1.0 到 C# 3.0 委托创建过程的...
  • C#中委托的调用

    2015-04-20 12:50:34
    C#中委托的调用有三种形式。假设定义了委托D,而在类C中有三个方法M1,M2和M3,其中M1和M2是静态方法,M3是实例方法,则这三种形式分别是:  D cd1=new D(C.M1); //直接在实例化委托时进行调用;  D cd2=C.M2; //...
  • C#中委托和事件的对比例子
  • C#中委托如何使用?

    2013-07-09 14:55:10
    C#中委托如何使用? 1. 委托概述  委托是C#中新加入的一个类型,可以把它想作一个和Class类似的一种类型,和使用类相似,使用一个委托时,需要两个步骤,首先你要定义一个委托,就像是定义一个类一样;然后,你...
  • 都说委托是指针,那么委托能代替指针么?C#中委托和指针的关系是什么
  • C#中委托和事件

    千次阅读 2019-09-26 13:36:33
    (1)C#中事件:事件时属于类的成员,所以要放在类的内部。 (2)委托属于一个定义,是和类、接口类似的,通常放在外部。 (因为大多数委托都要被重用) 委托定义在类里面还是类外面视情况而定,一般定义在与类...
  • C#中委托和事件使用教程 文章源码下载 C#委托与事件教程.zip (4.05 KB, 下载次数: 682)   委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不...
  • C#中委托的认识

    2019-04-11 09:36:06
    http://www.runoob.com/csharp/csharp-delegate.html ... C# 委托(Delegate)类似于 C 或 C++ 函数的指针。委托(Delegate)是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变。 委托(Dele...
  • C#中委托

    2017-10-31 21:45:00
    其实winform控件的事件也是特殊的委托类型。 如: 自定义委托:自定义委托在winform的用法。 当要在子线程更新UI时,必须通过委托来实现。 private delegate void myDelegate(string str); private...
  • 大白话系列之C#委托与事件讲解(序言) 大白话系列之C#委托与事件讲解一 大白话系列之C#委托与事件讲解二 大白话系列之C#委托与事件讲解三 大白话之C#委托与事件讲解大结局 委托定义一二三 第一步:声明一个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,045
精华内容 4,418
关键字:

c#中委托

c# 订阅