委托声明与声明类的关系及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
相关产品推荐
相关产品推荐

