| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 877 人关注过本帖
标题:新手求助,如何解读一段程序
只看楼主 加入收藏
ywqsa206
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2008-4-8
收藏
 问题点数:0 回复次数:6 
新手求助,如何解读一段程序
新手求助,如何解读一段程序
程序如下:
using System;

//定义一个具有加法功能的类

public class AddFunc
{
   //定义一个具有加法功能的方法
    public static void Add(int f, int s)
    {
        int result = f + s;
        Console.WriteLine("{0}+{1}={2}",f,s,result);
    }

}
//声明一个委托,和调用委托方法的类
public class UseAdd
{
    //定义加法操作中的两个加数
    protected int first;
    protected int second;
    //声明一个委托
    public delegate void MyDelegate(int first,int second);
    //声明一个委托实例
    public Mydelegate ma;
    //定义该类的构造方法
    public UseAdd(int first, int second)
    {
        this.first = first;
        this.second = second;
    }
    //定义调用委托的方法
    public void Invoke()
    {
        if (ma != null)
            ma(first,second);
    }
}

public class AppMain
{
    static public void Main()
    {
       //生成一个UseAdd类的实例
        UseAdd p = new UseAdd(12,15);
        //生成一个委托实例,并将它对应于AddFunc.Add方法
        p.ma = new UseAdd.MyDelegate(AddFunc.Add);
        //调用委托方法
        p.Invoke();
        string str = System.Console.ReadLine();
    }


}
运行结果是:12+15=27

详细说一下程序的解读过程(思路)?我初学编程希望大虾们能耐心指点下,谢谢。
是从Main()入口开始读取吗?
public delegate void MyDelegate(int first,int second)和p.ma=new UseAdd.MyDelegate(AddFunc.Add);
MyDelegate()里的参数是如何调用的?


可不可以这样理解:
UseAdd p=new UseAdd(12,15)
\\先执行构造函数
UseAdd.first=first
UseAdd.second=second
=>>p=UseAdd()
UseAdd(int first,int second)
\\代入参数12,15。返回
=>>UseAdd.fist=12,UseAdd.Second=15

p.ma=new UseAdd.MyDelegate(AddFunc.Add)
=>>ma=MyDelegate(AddFunc.Add)
=>>ma=AddFunc.Add \\MyDelegate委托在这里是不是可以舍去
=>>public delegate void MyDelegate(int first,int second)
    public static void Add(int f,int s)
\\是不是因为这里定义的Add()方法带了两个参数,所以才可以跟MyDelegate()对应上
=>>f=12,s=15,result=27。\\Add()方法返回空值(void)然后输出12+15=27。

p.Invoke()
=>>UseAdd().Invoke()
public void Invoke()
{
  if(ma!=null)
      ma(first,second);
}
=>>因为先前Add()方法返回了空值,所以不执行。

哪位大虾能不能通过的更简明的写法阐述一遍
我记得C里面好像有个因为所以的写法来着。
包括函数的返回值。程序的执行顺序。。谢谢。

[[it] 本帖最后由 ywqsa206 于 2008-4-14 17:23 编辑 [/it]]
搜索更多相关主题的帖子: 解读 
2008-04-14 14:09
huangyaoxing
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2008-4-11
收藏
得分:0 
一定是从Main()方法开始.
p.ma=new UseAdd.MyDelegate(AddFunc.Add);//实例化委托.
你实例化了ma后,你就可以把ma当作是UseAdd方法的别名.
2008-04-14 14:22
ywqsa206
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2008-4-8
收藏
得分:0 
恕我愚钝,还是不明白。
应该P才是UseAdd方法的别名吧,
UseAdd(12,15)里的参数是如何代进去的,能不能再说明白点。。
谢谢huangyaoxing。
2008-04-14 15:11
ywqsa206
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2008-4-8
收藏
得分:0 
可不可以这样理解:
UseAdd p=new UseAdd(12,15)
=>>p=UseAdd()
UseAdd(int first,int second)
=>>UseAdd.fist=12,UseAdd.Second=15

p.ma=new UseAdd.MyDelegate(AddFunc.Add)
=>>ma=MyDelegate(AddFunc.Add)
public delegate void MyDelegate(int first,int second)
public static void Add(int f,int s)返回result
\\是不是因为这里定义的Add()方法带了两个参数,所以才可以跟MyDelegate()对应上
=>>f=12,s=15,result=27。Add()方法返回值(12,15,12+15=27)。

p.Invoke()
=>>UseAdd().Invoke()
public void Invoke()
{
  if(ma!=null)
      ma(first,second);
}
=>>MyDelegate(AddFunc.Add)!=null

我写不下去了,,好像有点乱。。
哪位大虾能不能通过的更简明的写法阐述一遍
我记得C里面好像有个因为所以的写法来着。
包括函数的返回值。程序的执行顺序。。谢谢。
2008-04-14 16:20
野比
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:1627
专家分:516
注 册:2007-5-24
收藏
得分:0 
ma 是指向 Add(int, int) 的委托,
程序代码:
static public void Main()
{
    //生成一个UseAdd类的实例
    UseAdd p = new UseAdd(12,15);
    //生成一个委托实例,并将它对应于AddFunc.Add方法
    p.ma = new UseAdd.MyDelegate(AddFunc.Add);

这之前的代码就是使 ma 指向 Add 方法。
然后下一句
//调用委托方法
p.Invoke();

才是真正调用了方法,相当于
p.Invoke --> Add(12, 15)
不需要参数是因为之前
UseAdd p=new UseAdd(12,15)
的时候已经吧参数传进去了

女侠,约吗?
2008-04-14 19:09
ywqsa206
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2008-4-8
收藏
得分:0 
明白了。。简单明了,谢谢野比同时也感谢群里的小白同学。。

[[it] 本帖最后由 ywqsa206 于 2008-4-14 22:43 编辑 [/it]]
2008-04-14 22:08
野比
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:1627
专家分:516
注 册:2007-5-24
收藏
得分:0 
客气了

女侠,约吗?
2008-04-16 23:19
快速回复:新手求助,如何解读一段程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017196 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved