我学会了引用类型参数传递只是引用的副本。如果将传入的refernece参数指向被调用方法内的另一个对象,则原始引用不会更改。
我有一个测试方法来测试引用的参考类型参数。使用有效的SystemSwEvent类型对象从该测试方法调用refTest(SystemSwEvent systemSwEvent)
方法。在refTest()
方法中,调用processEvScanDataAvailable(EvScanDataAvaialble systemSwEvent)
方法。在processEvScanDataAvailable(EvScanDataAvaialble systemSwEvent)
方法中,我将传入的引用参数设置为null
。我希望refTest()
中的参数不应该更改。但事实并非如此。它将暂时更改为 。为什么呢?
答案 0 :(得分:4)
调试器识别当前上下文中的名称 并显示该值。 只是巧合您将光标指向实际触发当前正在执行的方法的位置(当前上下文)。
另请注意,您可以使用“调用堆栈”工具检查调用方法的参数。
答案 1 :(得分:2)
为什么?
我怀疑这是一个调试器问题,并不代表CLR中实际发生的事情。
尝试为您的参数使用不同的变量名称,这种行为将会消失。
答案 2 :(得分:0)
默认情况下,对象引用(如果您没有使用ref
或out
限定它们)通过值传递,因此该方法正在接收对象的副本引用 - 将该副本设置为null
不会更改原始对象引用,因此您声称看不到的内容很可能只是误解了您在调试器中看到的内容。
答案 3 :(得分:0)
调试器变得混乱,因为您的参数和变量具有相同的名称。如果更改参数的名称,您会注意到该调试器不再提供有关传入方法的变量的信息,但仅提供有关变量 in 的信息方法。
只需更改该参数的名称,您将不再遇到此问题。