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

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

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

Доброй ночи. Закроется ли к примеру StreamWriter в методе, который мы ему передаем или нужно дописывать Close(); там откуда мы вызывали метод. Более понятно будет кодом.
Листинг программы
  1. private void button2_Click(object sender, EventArgs e)
  2. {
  3. StreamWriter sw = new StreamWriter("test.txt");
  4. sw.WriteLine("one");
  5. Write(sw);
  6. // да или нет? sw.Close();
  7. }
  8. private void Write(StreamWriter sw)
  9. {
  10. sw.WriteLine("two");
  11. sw.Close(); // тут же мы закрывает копию sw, а в методе вызывающем он висит?
  12. }
Закроется ли StreamWriter и не будет висеть в куче/памяти... Или нужно вызывать sw.Close() где комментарий. Если так, то ref решит проблему?
Листинг программы
  1. private void button2_Click(object sender, EventArgs e)
  2. {
  3. StreamWriter sw = new StreamWriter("test.txt");
  4. sw.WriteLine("one");
  5. Write(sw);
  6. }
  7. private void Write(ref StreamWriter sw)
  8. {
  9. sw.WriteLine("two");
  10. sw.Close();
и если решит можно ли тогда делать вот так
Листинг программы
  1. private void button2_Click(object sender, EventArgs e)
  2. {
  3. StreamWriter sw = new StreamWriter("test.txt");
  4. sw.WriteLine("one");
  5. Write1(sw);
  6. sw.Close(); // тут гасим везде, ведь мы не копию передавали.
  7. }
  8. private void Write1(ref StreamWriter sw)
  9. {
  10. sw.WriteLine("1");
  11. Write2(ref sw);
  12. }
  13. private void Write2(ref StreamWriter sw)
  14. {
  15. sw.WriteLine("2");
  16. Write2(ref sw);
  17. }
  18. private void Write3(ref StreamWriter sw)
  19. {
  20. sw.WriteLine("3");
  21. Write2(ref sw);
  22. }

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

textual
Листинг программы
  1. private void button2_Click(object sender, EventArgs e)
  2. {
  3.        using(StreamWriter sw = new StreamWriter("test.txt"))
  4.        {
  5.             sw.WriteLine("one");
  6.             Write(sw);
  7.        }
  8. }
  9.  
  10. private void Write(StreamWriter sw)
  11. {
  12.      sw.WriteLine("two");
  13. }

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


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

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

13   голосов , оценка 4.154 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы