繁体   English   中英

在C#中将参数作为最终参数传递

[英]Passing parameter as final in C#

这可能是一个重复的问题。但是在搜索中找不到它,在Java中将方法参数标记为常量时,我​​们将其声明为最终的等效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#中的工作方式。

在安装了Code Contracts加载项的C#4.0 / Visual Studio 2010中,可以在ContractInvariantMethod属性中使用Contract.Invariant来检查在方法调用期间未修改值。

不完全相同,但我想与您差不多。

在C#中没有这样的东西

C#具有只读关键字,但是不能用于局部变量(仅适用于类成员)。 这意味着无法标记方法参数常量。

我也想念它,因为在我的Java代码中几乎每个参数和局部变量都是最终的(我相信这是一种很好的编码模式)。

正如其他人所说,C#中没有这样的东西。

如果您打算禁止调用的方法更改您的对象 (或肯定不会更改 ),则唯一的选择是传递对象的深层克隆 -不是很优雅,但是唯一可以确定的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM