【问题标题】:changing value of variable on another scope with method in C#使用 C# 中的方法更改另一个范围内的变量值
【发布时间】:2021-12-20 20:31:59
【问题描述】:

我在 .NET.Sockets 中遇到了一个叫做“Recieve()”的奇怪方法 .Recieve() 方法在不使用 ref 或 out 的情况下更改 buff 变量。谁能给我解释一下。

完整代码:

        Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

        IPAddress ipAddr = IPAddress.Any;

        IPEndPoint endPoint = new IPEndPoint(ipAddr, 23000);

        server.Bind(endPoint);

        server.Listen(5);

        Socket client = server.Accept();

        Console.WriteLine("Client endpoint : " + client.RemoteEndPoint.ToString());

        byte[] buff = new byte[128];

        //this method confuses me Receive(buff)
        int numberOfRecievedBytes = client.Receive(buff);

        Console.WriteLine("Number of Recieved Bytes: " + Encoding.ASCII.GetString(buff, 0, numberOfRecievedBytes));

【问题讨论】:

  • byte[] 是一个引用类型。任何方法都可以修改作为参数传递的数组的内容(如果没有refout,它们不能修改buff 本身的引用,但这是另一回事)。
  • C# 编程指南here 中描述了此行为。 (奇怪的是,该指南认为不适合在引用类型和数组的专门主题中描述数组是引用类型,尽管这是一件很重要的事情。)
  • 开枪!你说得对。谢谢。

标签: c# ref out


【解决方案1】:

Byte[] 是一个引用类型;您正在传递对字节类型数组的引用。 您可以改变其内容,但不能改变引用本身。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-09
    • 1970-01-01
    • 2022-07-07
    • 2019-01-10
    • 2011-07-27
    • 2020-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多