随笔 - 31  文章 - 2 评论 - 26 阅读 - 46600
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

本人学习c#刚两个星期,今天看到delegate机制有以下领悟:
C#中的delegate机制相似于C/C++中的指针机制,它允许你传递一个类一个方法给另一个类的对象,使得其他类可以使用这个方法。与函数指针只能指向静态函数相比,delegate可以引用非静态函数成员,在引用非静态成员函数时,delegate不但保存了对此函数入口指针的引用,而且还保存了调用此函数的类实例的引用。

使用方法如下代码:
TestClass :

using System;

namespace test
{
    
/// <summary>
    
/// Class1 的摘要说明。
    
/// </summary>

    class TestClass
    
{
        
/// <summary>
        
/// 应用程序的主入口点。
        
/// </summary>

        [STAThread]
        
static void Main(string[] args)
        
{
            
//
            
// TODO: 在此处添加代码以启动应用程序
            
//

            
//声明MyClass对象
            MyClass myClass = new MyClass();
            
//应用MyClass对象的fun方法
            MyEventHandler myDelegate = new MyEventHandler(myClass.fun);
            
//调用myDelegate
            myDelegate("myDelegate is called.");

        }


        
//声明delegate类型
        public delegate void MyEventHandler(string str);


    }

}

MyClass:

using System;

namespace test
{
    
/// <summary>
    
/// MyClass 的摘要说明。
    
/// </summary>

    public class MyClass
    
{

        
public void fun(string str)
        
{
            Console.WriteLine(
"This is a function that will be delegate.");
            Console.WriteLine(
"The input parameter is: " + str);            
        }


    }

}


输出结果:
This is a function that will be delegate.
The input parameter is: myDelegate is called.

因为是初学者,讲不清楚的地方请大家谅解,以下是我引用MSDN 2003里面的一段话希望能使大家对delegate有更深的理解:
C# 中的委托类似于 C 或 C++ 中的函数指针。使用委托使程序员可以将方法引用封装在委托对象内。然后可以将该委托对象传递给可调用所引用方法的代码,而不必在编译时知道将调用哪个方法。与 C 或 C++ 中的函数指针不同,委托是面向对象、类型安全的,并且是安全的。

委托声明定义一种类型,它用一组特定的参数以及返回类型封装方法。对于静态方法,委托对象封装要调用的方法。对于实例方法,委托对象同时封装一个实例和该实例上的一个方法。如果您有一个委托对象和一组适当的参数,则可以用这些参数调用该委托。

委托的一个有趣且有用的属性是,它不知道或不关心自己引用的对象的类。任何对象都可以;只是方法的参数类型和返回类型必须与委托的参数类型和返回类型相匹配。这使得委托完全适合“匿名”调用。


 

posted on   烂人  阅读(541)  评论(2编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示