SSS_Sans 2022-07-18 21:13 采纳率: 50%
浏览 11
已结题

关于类的内存于释放问题

发现一个问题。

假如,写一个类,这个类就只有一个方法,就是返回一个随机数,以下是类的代码

   public class TextCC
    {
        public string ABCD()
        {
            Random r = new Random();
            int A = r.Next(0, 32);
            return A.ToString();
        }
    }

然后,我们现在放置一个按钮,通过按钮来调用这个类。
那么问题来了

假如,我是使用循环调用,代码如下


  private void button1_Click(object sender, EventArgs e)
        {
            TextCC CC = new TextCC();
            for (int i = 0; i < 70; i++)
            {
                richTextBox1.AppendText(CC.ABCD().ToString() + "/");
            }      
        }

那么返回的结果,就很奇怪。就是这样

img

但如果,不适用循环,代码如下


 private void button1_Click(object sender, EventArgs e)
        {
            TextCC CC = new TextCC();
            richTextBox1.AppendText(CC.ABCD().ToString() + "/");
        }

返回的结果,就特别正常,全是随机的

img

就算把引用,放进循环里,代码如下

 private void button1_Click(object sender, EventArgs e)
           {  

            for (int i = 0; i < 70; i++)
            {
                TextCC CC = new TextCC();
                richTextBox1.AppendText(CC.ABCD().ToString() + "/");
            }
          
        }

返回的结果,也是一样的很奇怪

img

我就没搞懂为什么?为啥单点就正常,遍历就不正常?哪怕我把new放进遍历里,也不正常,啥意思啊。是不是遍历太快了,类还没来得及释放就又被调用了,导致结果出问题!

  • 写回答

4条回答 默认 最新

  • IT技术分享社区 优质创作者: 数据库技术领域 2022-07-18 21:31
    关注

    C#生成随机数和计算的时间有关系 如果需要随机的话
    可以加一个暂停代码 试试

     
      private void button1_Click(object sender, EventArgs e)
            {
                TextCC CC = new TextCC();
                for (int i = 0; i < 70; i++)
                {
                    richTextBox1.AppendText(CC.ABCD().ToString() + "/");
    Thread.Sleep(300);
                }      
            }
    ```c#
    
    
    

    ```

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 7月26日
  • 已采纳回答 7月18日
  • 创建了问题 7月18日