2009-10-15 40 views
2

我在代码中见过delgates和常量,但是在何时何地使用这些代码的适当时间呢?我见过的用途可以看到其他方法来编程他们?任何人都可以告诉我真正的好处,我从来没有用过。C#常量和代表

+3

这可能是值得询问分别代表和常量。这很难回答,因为它们有些独立的概念。 – Chris 2009-10-15 15:33:08

+0

常量的其他方式:直接使用该值(对理解代码不太好),代表的其他方式:我所知道的都不是。 – Abel 2009-10-15 15:45:34

回答

2

如果您将事件添加到班级或正在做任何异步操作(还有其他几个充分的理由让代表),代表是绝对必需的。好处是它是一种非常灵活的方法。

常量可帮助您防止“幻数”。又名提供了一个中心位置,您可以指定语义相同的常量数据。他们的好处是他们承担绝对没有性能或内存开销。

1

常量应该用于像pi(3.14159 ...)这样的值。使用它们意味着你的代码读取理智:

double circumference = radius * 2.0 * PI; 

这也意味着,如果不断变化的值(显然不适合PI!),那么你只需要改变一个地方的代码。

5

我想强调constreadonly之间的区别在C#中,即使你不问,也可以是重要的:

  1. 当您编译时,const变量被其文字值替换。这意味着,如果您更改其值(即,将更多数字添加到PI或增加允许的MAX_PROCESSORS),并且其他组件使用此常数,则它们将不会看到新值。
  2. A readonly变量也不能被更改,但编译时永远不会被它的字面值替换。更新引用时,应用程序的其他组件将立即看到此更新并且不需要重新编译。

这种差异是微妙的,但非常重要,因为它可以引入微妙的错误。这里的教训是:只有在使用const时,您绝对确定该值永远不会改变,否则使用readonly

代表是一个方法调用的占位符(蓝图,签名)。我认为它们是的接口声明。委托变量属于委托类型。它可以像使用方法一样使用(但它可以指向同一方法签名的不同实现)。

+3

顺便说一句:有一个简单的规则,以防止你可以用常量的每个问题:只需创建私人或内部常量。从不公开。然后,只要你喜欢就可以使用它们,只要你喜欢就可以改变它们。但对于公众常量而言,你是对的。他们真的永远不会改变。 – Foxfire 2009-10-15 15:54:46

+0

+1这确实是一条很好的经验法则,但也有例外,但它们很少见,并且很快进入更加模糊的反射技术的领域,其中内部常量与内部只读之间的区别得到了另一个维度。 – Abel 2009-10-15 16:07:54