Csharp/C#教程:我可以修改传递的方法参数分享


我可以修改传递的方法参数

我的直觉是说我不应该做以下事情。 我没有得到任何关于它的警告。

void test(DateTime d) { d = d.AddDays(2); //do some thing with d } 

或者这更合适

  void test(DateTime d) { DateTime _d = d.AddDays(1); //do some thing with _d } 

出于某种原因,我总是像第二个例子那样处理传递的参数。 但是我不确定它是否真的很麻烦……也许这只是一个无所不在的代码。

我不认为调用方法将使用修改后的值。 任何人都有任何意见

参数值的更改对调用者是不可见的,除非它是refout参数。

如果您对参数引用的引用类型对象进行更改,则情况并非如此。 例如:

 public void Foo(StringBuilder b) { // Changes the value of the parameter (b) - not seen by caller b = new StringBuilder(); } public void Bar(StringBuilder b) { // Changes the contents of the StringBuilder referred to by b's value - // this will be seen by the caller b.Append("Hello"); } 

最后,如果参数通过引用传递, 则会看到更改:

 public void Baz(ref StringBuilder b) { // This change *will* be seen b = new StringBuilder(); } 

有关详细信息,请参阅我关于参数传递的文章 。

您可以更改它,但更改不会返回给调用者。

如果是ValueType – >发送对象的副本

如果是RefernceType – > Copy of Object引用将按值发送。 通过这种方式,可以更改对象的属性,但不能更改引用本身 – 调用者无论如何都不会看到更改。

如果发送ref – >参考可以更改。

在C ++中,您可以使用const来防止更改,但C#没有。 这只是为了防止程序员错误地尝试改变它 – 取决于使用const地方。

如果您希望能够访问原始值,请使用第二种方法。

如果你不关心原始值,你可以使用任何一个(虽然我可能仍然使用第二个)。

无论哪种方式,在这种情况下,你不会伤​​害任何其他人的值(即使你重新赋值,它也不会让它回到调用者身上)。

上述就是C#学习教程:我可以修改传递的方法参数分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/998144.html

(0)
上一篇 2021年12月26日
下一篇 2021年12月26日

精彩推荐