在C#中,你在哪里使用参数前面的"ref"?

leo*_*ora 18 c# ref

关于"ref"和"out"参数的定义已经存在许多问题,但它们看起来像是糟糕的设计.您是否认为ref是正确的解决方案?

看起来你总能做一些更干净的事情.有人能给我一个例子,说明这将成为问题的"最佳"解决方案吗?

mqp*_*mqp 11

在我看来,ref很大程度上弥补了宣布新的实用程序类型的难度以及对现有信息"处理信息"的困难,这是C#自从它通过LINQ,泛型和匿名类型创建以来已经迈出了巨大的步伐.

所以不,我认为不再有很多明确的用例了.我认为这主要是该语言最初设计的遗留物.

我认为在你需要从函数返回某种错误代码以及返回值的情况下仍然有意义(如上所述),但没有别的(所以更大的类型不是真正合理的. )如果我做的这一切在一个项目的地方,我可能会定义的东西加错误代码一些通用的包装类型,但在任何给定的情况下ref,并out都OK.


Jul*_*anR 9

好吧,ref通常用于特殊情况,但我不会称之为冗余或C#的遗留功能.你会看到它(和out)在XNA中使用了很多.在XNA中,a Matrix是一个struct相当庞大的(我相信64个字节)并且通常最好将它传递给函数,ref以避免复制64个字节,但只需要4个或8个.专家C#功能?当然.不再使用或表示不好的设计?我不同意.


Hen*_*man 7

一个领域是使用小实用功能,例如:

void Swap<T>(ref T a, ref T b) { T tmp = a; a = b; b = tmp; }  
Run Code Online (Sandbox Code Playgroud)

我在这里看不到任何"更清洁"的选择.当然,这不完全是架构级别.