这可能是一个重复的问题,但在搜索中找不到。 在Java中,我们将方法参数标记为常量,声明为final。在C#中有相应的关键字吗? 比如
public void doSomeThing(final object myObject)
{
//print myobject
}
这可能是一个重复的问题,但在搜索中找不到。 在Java中,我们将方法参数标记为常量,声明为final。在C#中有相应的关键字吗? 比如
public void doSomeThing(final object myObject)
{
//print myobject
}
在C#中不可能实现这一点——没有办法将传递的参数标记为常量。
如果你有一个需要在多个函数中使用的const
,为什么不使用正确的作用域(如果需要,可以使用类作用域或全局作用域)声明它呢?
C# 中有一个 readonly
关键字,但到目前为止,我们只能将其应用于字段,而不能应用于局部变量或参数。
通常在 Java 中,final
关键字习惯性地被用作样式问题,以便更容易地在匿名内部类中关闭值。但这个问题在 C# 中不存在,因为匿名方法/lambda 可以关闭可修改的变量。
此外,像 Resharper 这样的工具可以显示不同颜色的变异变量/参数,因此您可以一眼看到方法中的“复杂性”。 我用它来使变异的名称以粗绿色文本或类似于此的方式突出显示!
这并不是说 C# 本身不会通过许多其他功能(例如广泛适用的 readonly
)来改进已声明的不可变性。但如果您有短小的方法和 Resharper 为您突出显示内容,则不完全需要手动声明事物为 final/readonly/const(根据语言)。IDE 会为您跟踪它。
这更有意义:正如 Java 程序员所发现的那样,大多数“变量”实际上根本不是变量。但如果您必须通过添加 final
来声明所有内容,那么您的代码中会有很多额外的关键字噪音。默认值为 final
并具有使事物 mutable
的关键字,这在 F# 中就是这样工作的。
mutable
关键字。将常见情况设置为默认值,使用关键字来覆盖较少的情况,这只是常识而已。 - Daniel EarwickerC#有一个readonly关键字,但它不能用于局部变量(仅限类成员)。 这意味着没有办法标记方法参数为常量。
我也很想念它,因为在我的Java代码中,几乎每个参数和局部变量都是final(我认为这是一种良好的编码模式)。
正如其他人所说,在C#中没有这样的东西。
如果您的意图是禁止被调用的方法更改您的对象(或确保它不会),您唯一的选择是传递您对象的深层克隆。- 不太优雅,但是确保的唯一方式。