.NET 4.x Using классы передавать в метод с ref или без - C#

Узнай цену своей работы

Формулировка задачи:

Доброй ночи. Закроется ли к примеру StreamWriter в методе, который мы ему передаем или нужно дописывать Close(); там откуда мы вызывали метод. Более понятно будет кодом.
 private void button2_Click(object sender, EventArgs e)
        {
        StreamWriter sw = new StreamWriter("test.txt");
        sw.WriteLine("one");
        Write(sw);
 
        // да или нет? sw.Close();
        }
 
        private void Write(StreamWriter sw)
        {
            sw.WriteLine("two");
            sw.Close(); // тут же мы закрывает копию sw, а в методе вызывающем он висит?
        }
Закроется ли StreamWriter и не будет висеть в куче/памяти... Или нужно вызывать sw.Close() где комментарий. Если так, то ref решит проблему?
private void button2_Click(object sender, EventArgs e)
        {
        StreamWriter sw = new StreamWriter("test.txt");
        sw.WriteLine("one");
        Write(sw);
        }
 
        private void Write(ref StreamWriter sw)
        {
            sw.WriteLine("two");
            sw.Close();
и если решит можно ли тогда делать вот так
private void button2_Click(object sender, EventArgs e)
        {
        StreamWriter sw = new StreamWriter("test.txt");
        sw.WriteLine("one");
        Write1(sw);
        sw.Close(); // тут гасим везде, ведь мы не копию передавали.
        }
 
        private void Write1(ref StreamWriter sw)
        {
            sw.WriteLine("1");
            Write2(ref sw);
        }
      private void Write2(ref StreamWriter sw)
        {
            sw.WriteLine("2");
            Write2(ref sw);
        }
      private void Write3(ref StreamWriter sw)
        {
            sw.WriteLine("3");
            Write2(ref sw);
        }

Решение задачи: «.NET 4.x Using классы передавать в метод с ref или без»

textual
Листинг программы
private void button2_Click(object sender, EventArgs e)
{
       using(StreamWriter sw = new StreamWriter("test.txt"))
       {
            sw.WriteLine("one");
            Write(sw);
       }
}
 
private void Write(StreamWriter sw)
{
     sw.WriteLine("two");
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.154 из 5
Похожие ответы