首页 新闻 会员 周边

.net好几个问题都弄不明白

0
悬赏园豆:10 [已解决问题] 解决于 2008-11-03 17:46

1、值和引用。

     虽然知道值传递的是副本,引用传递的是地址。但还是搞不清楚两个问题。

     (1)值传递引用和引用传递引用到底传递的是引用的是什么东西,那么关于传递引用的其他问题也就都不知道了。

     (2)值传递值类型

using System;
class RefClass
{
    static void AddValue(int x)

    {
        x++;
    }
    static void Main()
    {
        int i = 22;
        AddValue(i);
        Console.WriteLine(i);
    }
}

为什么执行了x++,i的值还是22。

2、接口的用处。

    我的看法就是因为只能继承一个类,所以用它来帮助继承多个类的方法。

3、委托和事件。

    委托给我的感觉和接口、重载有点像。但又感觉很别扭。

    事件的话,我觉得就是对动态的响应,真不知道和委托有什么关系,不知道为什么总要和委托放到一起。

望各位大虾给与解答,谢谢!

问题补充: (2)值传递值类型 using System; class RefClass { static void AddValue(int x) { x++; } static void Main() { int i = 22; AddValue(i); Console.WriteLine(i); } } 为什么执行了x++,i的值还是22。 已经明白
长风一剑的主页 长风一剑 | 初学一级 | 园豆:29
提问于:2008-11-03 11:04
< >
分享
最佳答案
0

1.

copied from: http://space.cnblogs.com/question/1425/

对象们都住在不同的房间里,每个房间只能住一个对象.对象们都被锁在房间里,永远没有办法搬家(至少从我们讨 论的角度来说,这个说法是正确的).所以如果你知道了一个对象的房间号,就能找到对应的对象. 现在假如我们有两张名片,上面如果写着相同的房间号,我们就可以断定,这两张名片是同一个对象分发出来的,这就是同一性,也就是你所说的一致. 假如1号房里住着一个值为1的整数对象, 2号房里住着另一个值为2的整数对象,3号房里住着另另一个值为1的整数对象.我们又有它们各自的一张名片, 那么,第一个名片和第三个对应的对象的值是相等的,但是它们不是同一个对象,用你的词来说,也就是说它们"相等",但不"一致". 如果上面说得太清楚了,那么这里让你再困扰一会吧,哈哈: 这里的名片就是引用(i, count之类的变量/字段等的名称); 房间所在的大楼就是内存,房间号就是内存地址. 对象就是内存里保存的数据.

---------------

在调用方法传递参数时,我们可以选择把对象的内容复制一份传递过去,也可以选择把对象所在的房间号传递过去(当然,这样一来,被调用的方法得先从对应的房间里找到指定的对象才能进一步操作).第一种方法传递的是一个全新的对象,和原来的对象没有任何关系,只是在传递时两者的值相等,所以叫"按值传递";第二种方法则是引用传递,由于被调用方法里操作的对象就是原来的对象,所以对它的任何修改都可以影响到调用方法.

2,

对,在.net里接口最大的用处就是这个.

3, 委托是一种类型,和class, enum, struct等类似. 事件则是对象成员的一种分类,和property, field, method等类似. 每个对象成员都拥有/属于一个类型. 这就是委托和事件之间的关系.

 

deerchao | 大侠五级 |园豆:8367 | 2008-11-03 12:07
其他回答(3)
0

2.对的,就是用来帮助实现继承多个类的一种变通用的工具,事实上就是一个纯抽象类,没什么特殊的,关键在于你能不能在接口层次上进行建模和应用

3.委托就是一个指向方法的引用,调用委托就调用了方法,觉得别扭就学术派一些用接口代替吧

事件是一种“提供”的概念,“某类提供了某事件以供监听”,而委托是“需要”的概念,“某类执行某方法时需要外部给予某委托“

事件是设计模式中的观察者模式的快捷版

Gray Zhang | 园豆:17610 (专家六级) | 2008-11-03 11:33
0

同意楼上的!

Geeks | 园豆:560 (小虾三级) | 2008-11-03 15:30
0

1、你需要去了解.net里的值类型以及引用类型。

2、巧妙的应用接口的好处是增强系统的可扩展性,针对接口编程,而不是针对具体的实现编程 。

3、委托你可以理解成函数指针。

更多细节,推荐书籍:

框架设计(第2版):CLR Via C#

5yplan | 园豆:1330 (小虾三级) | 2008-11-03 17:16
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册