You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

委托声明与声明类的关系及IntelliSense显示委托类型的原因咨询

关于委托声明与类的关系及IntelliSense显示问题的解答

咱们先拆解第一个问题:委托声明与声明它的类之间的关系

在你给出的代码里,Initdel是声明在DelDec类内部的委托,这种情况下,这个委托属于类的嵌套类型——简单说,它是DelDec类的一个成员,但它不是普通的字段或方法,而是一个自定义的委托类型,就像你在类里定义另一个嵌套类一样。

  • 这个委托类型的完整名称是DelDec.Initdel,如果它的访问修饰符是public(就像你代码里那样),外部代码也可以通过这个完整名称来引用它;
  • 它和类的其他成员一样受访问修饰符约束,比如改成private的话,只有DelDec类内部能使用这个委托类型;
  • 你可以把它理解成“属于这个类的一种自定义类型”,和类里的枚举、嵌套类性质类似,是类的组成部分。

再来说第二个你好奇的点:为什么类对象点号后IntelliSense会显示委托名称

先看你代码里的DelDec类:

public class DelDec { 
    public delegate void Initdel(String s); 
    public Initdel Init; // 这里的Init是委托类型的字段
}

这里的Init并不是委托类型本身,而是DelDec类的一个公共字段,它的类型是刚才定义的Initdel委托。当你创建DelDec的实例,比如:

var myDelInstance = new DelDec();

输入myDelInstance.时,IntelliSense会列出这个类的所有可访问成员——包括字段、方法、属性等等,Init作为公共字段自然会出现在列表里。

结合你的Methoddef类,给你补个完整的使用例子:

public class Methoddef { 
    public void process(string s) { 
        Console.WriteLine("The message passed is" + s); 
    } 
}

// 在Program类的Main方法里
static void Main()
{
    DelDec myDel = new DelDec();
    Methoddef methodObj = new Methoddef();
    // 把process方法赋值给委托字段Init
    myDel.Init = methodObj.process;
    // 调用委托
    myDel.Init("Hello World!");
}

你操作的是myDel实例的Init字段(委托类型的实例),所以IntelliSense会把它当作类的成员展示出来;而委托类型Initdel本身,如果你输入DelDec.的话,也会在IntelliSense里看到它,因为它是DelDec的嵌套类型。


内容的提问来源于stack exchange,提问作者Raida Adn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:03:51