在几个星期,我会教一类的第一年工程师的要点参考文献在C#作为其第一年的编程的课程。他们中的大多数从来没有被编程之前,有足够的麻烦学习的对象,因此,教学参考文献将是一场艰苦的战斗。我计划要有大量的例子可供学生通过自己,但只是显示一串的实例往往很巨大,如果潜在的概念不"点击"。

因此,我将把这个问题出使社区:的最好方法是什么你看出引用的教导?是什么让它"点击"对于你吗?是否有任何参考相关材料,我的失踪?

我的暂定课程计划是:

  1. 什么是基准(使用 参像埃里克利珀特的)
  2. 参考文献和垃圾收集器
  3. 参照类型和价值的类型
  4. 不可改变的类型
  5. 通过参与传递的价值(以及 所有微妙之处 的对象引用通过价值)
  6. 少数几个讨厌的例子,产生意想不到的结果如果你不明白1至5。
有帮助吗?

解决方案

一种方式,我听说过它解释说是用手机或者对讲机。你(教师)举行的一端,并宣布,你是一个目的实例。你呆在一个地方(ie。堆)虽然学生通过其他结束(其是在讲电话,如果它是一个手机)周围的教室。

他们可以与你通过"参考"他们需要你,但是他们真的没有"你"在他们身上。

其他提示

我喜欢的URL的比喻,描述之间的差异参考和价值的类型。你可以通过周围一个网址作为一个参考到一些内容。你可以修改该网址不需要修改,内容。你也可以得到的内容通过的URL也许修改的内容。

这是一个有用的参考:

 http://www.yoda.arachsys.com/csharp/parameters.html

试着解释一下参考文献 , ,作为纯粹的文本有时没有得到通过大多数人。许多资源和书上的专题,不要试图解释通过数字,因为它很难与分配通过口头通信单(这主要是一个问题的注意力大多数的人)。

至少设法指出如何对象相互关联的,一个简单的例子将是一个简单的参考。

鉴于:

class A {
    B b = new B();
}

class B {
   int mine = 1;
}

当实例类 A 作为对象 a 从一些情况下,下图说明它是如何将所有的看起来在堆。点的图是要表明如何在不同的对象相互关联并且具有心理模型,对如何堆工作原理。

         +-A-----+
a: *---->|       |
         |       |   +-B--------+
         | b: *--+-->|          |
         |       |   | mine: 1  |
         +-------+   |          |
                     +----------+

也试着解释之间的差堆堆的分配。调用的方法与参数。简单的例子就是这样的:

鉴于以下方法:

public void doSomething(B b) {
   int doMine = b.mine + 1;
}

打电话时 doSomething 让它做的事,在结束 doSomething's堆将如下。这一点显示,对象不直接驻留在一堆,但它是刚才提到的一个目在该堆中和目是共用过的参考文献。

whoever called doSomething *
                           |
                           v
+-doSomething-+   +-B--------+
| b: *--------+-->|          |
|-------------|   | mine: 1  |
| doMine: 2   |   +----------+
+-------------+

另一个说明性的例子将说明一系列其中一个目和一个多层面阵列包含一系列阵列。

我找到了 这篇文章 真的有用explaning参数通过。该条款还做了很好的工作说明的价值和参考类型的一般条款。

这是更多的视觉表示这帮助了我很多。

图片和图表。

人们形成精神的图像的概念,他们正在学习,一些代表 参考文献 和他们的关系到他们的关联 对象 是一个良好的开端。同样,可视化 对象 作为包含件 变量 (其中包括提到其他目的)和成员 方法, a la UML图,是非常有益的。

稍后,可以深入研究的详细资料参考和基本类型实际上实现的,如果你觉得有必要这样做。但是拖延这些讨论,尽可能长的时间,因为人们可以得到深陷在试图对抽象的概念的代表详细信息,分散学习的抽象概念。

当我还是学习的维生素b6中,引用实际上混淆了我一点。然后我试着学习C++、后处理指针、参考文献完全有理由要我。了解它从一个什么-实际发生的事情的角度更容易对我来说比地理解它从一个面向对象的概念角度。也许你可以去在引擎罩下的东西在你的教训。

我建议减少一个人使用的裸期"参考",因为它可以使用。净提到两个非常不同的东西:内容类型的储存地点,并参数通过了一个"参考"限定词。使用的术语"对象参考"对于前者,和"ref参数"后者。

在描述什么是一个"对象参考"是的,我会建议使用的术语"object ID"。Object ID是有一些东西,让他们从不同的"地址":

  1. 一个不能做很多事情object ID's.一个可以测试是否是一个空白,检查是否他们两个都是平等的,复制一个存储位置合适的类型,或查对象称,由一个并要求它做一些事情。大多数请求做一些类型值或变量是真的请求做一些与所提到的对象。注意到一个无法操纵的一个ID的一个对象在这样一种方式得到身份的另一个,作为一个可以用的地址。
  2. 同时,该系统必须有一个装置转换object ID的地址,有的是没有保证,它将使用任何特定的手段这样做。也没有任何保证,这位模式相关的任何对象标识不会自发地发生改变;所有被保证的是,如果位模式的变化,新的模式将参照相同的对象为老。
  3. 该系统跟踪的每一个地方,对象标识的保存。只要任何复制的对象ID存在,对象ID将永远不会提到任何其他物体实例。相比之下,在一般情况下,系统,这些系统使用的地址的事情不跟踪每一个地方在那里的一个地址,可能会被复制。这有可能是对象可能会停止存在,同时个人仍然有一份其地址,以及一些新的对象可能是创建具有相同的地址。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top