out
变量引用可以用未赋值变量的地址初始化,但ref
变量不能这样做,使得out
优于ref
。那么需要什么ref
?为什么都出&ref?
回答
问题是因为out函数必须在函数结束前被初始化或赋值。基本上这样你就不会忘记设置变量。
static void Method(out int pointer)
{
pointer = 5; //Initialize or assign to fix the error
}
检查此链接:
理念仍然你在做什么是引用类型正确通过传递前初始化,但出来的调用方法需要返回
之前赋值尝试删除主方法中的赋值,然后使用Ref,您将得到差异,这将再次导致编译错误
看起来像一个断开的链接。 – 2018-01-12 20:42:42
我的理解是,out参数是通过被调用的方法设置的,而不是传递给方法。
所以这将是有效的:
class Program
{
static void Main(string[] args)
{
int integer;
Method(out integer);
// integer is now 9
}
static void Method(out int pointer)
{
...
pointer = 9;
}
}
// Option 2:
class Program
{
static void Main(string[] args)
{
int integer = 9;
Method(integer);
}
static void Method(int pointer)
{
//Do something with pointer = 9
}
}
正如你说,你是知道有关的差异,因此我假设你也是知道的事实说出来的参数必须分配。
因此,我相信你想知道为什么需要分配out参数。
out关键字 - 这意味着你正在使用这个参数来输出一些东西。
考虑,int add(int x,inty)。如果此方法不会返回任何应用程序。这里我们也声明了一个合约,该方法返回整数。同样如果out关键字的情况下,我们正在定义一个out变量将被分配并将作为输出提供的合同。
为什么我们需要更新? 这是因为我们明确地将其标记为out参数,因此我们确信我们将分配一个值并将其返回。如果有情况我们没有任何可分配的东西,而且我们仍在使用论据,那么我确信我们有设计问题。
ref关键字: - 这意味着您传递参考。它绝不意味着你会分配它并提供一些输出。你可以用这种方式使用它,但它不是合同。你有一个参数的参考,你可以做任何事情。在C#参数默认情况下通过值传递。 ref关键字给你一种通过引用传递参数的方法。
您可以了解更多关于ref关键字here的信息。
希望这会有所帮助。
如果你只想通参数通过引用的函数,你应该使用ref
:
class Program
{
static void Main(string[] args)
{
int integer = 9;
Method(ref integer);
}
static void Method(ref int pointer)
{
}
}
这通常编译。
- 1. 为什么rval ref绑定到lval ref函数?
- 2. 为什么UdpClient.Receive需要ref参数?
- 3. 为什么'ref'和'out'支持多态?
- 4. 为什么NUnit的Assert.That(..)有ref重载?
- 5. 为什么Me.components什么都没有?
- 6. React中的ref是什么?
- 7. `&`和`ref`有什么区别?
- 8. 什么?ref = rua在Facebook上?
- 9. 什么都为iPhone开发
- 10. 为什么我可以std ::移动一个流rvalue ref到一个左值ref?
- 11. 试图减少mysql查询,为什么'ref'为NULL?
- 12. WordPress the_permalink()什么都没输出
- 13. Visual c#什么都没有出现
- 14. 什么是在ref中弹出PersistentQueue的惯用方法?
- 15. C#为什么部分方法可以使用ref,但不出来?
- 16. 为什么我无法使用Type.InvokeMember检索输出或ref参数的值?
- 17. 任何人都可以找出为什么树没有链接
- 18. 为什么输出到这个代码都是2?
- 19. 装箱和拆箱,为什么输出都不是“System.Object”?
- 20. 为什么我的输出每次都是空的?
- 21. 为什么不是所有的图像都显示出来?
- 22. 为什么此输出每次都会返回不同的值?
- 23. 为什么每次都会出现分段错误?
- 24. Firebase - ref和孩子有什么区别?
- 25. 什么是@ $ ref - > {@ keys}试图访问?
- 26. 什么时候通过ref关键字
- 27. ref和out有什么区别?
- 28. 什么时候ref($ variable)返回'IO'?
- 29. 为什么一切都显示:块?
- 30. 什么都可以发布为python包?
正确的答案是“因为它是”。这就是'out'的定义。 – Mephy 2014-10-12 05:05:33
@Mephy还有5人聚集在一起提供答案。 – mihai 2014-10-12 05:17:50
@Mephy no offens,你可以请转发的链接,定义这种行为的参数。为更好地理解 – 2014-10-12 05:22:41