在类构造函数中使用using语句有意义吗? [重复]

问题描述 投票:0回答:3

[我的意思是使用下面的语句,在我的类的构造函数中,我使用FileSystemWatcher实例,在这样的类构造函数中使用using语句是否有意义,还是必须在没有using语句的构造函数中使用它?] >

public partial class MyService : ServiceBase
        {
            FileInfo file;
            StreamWriter writer;
            FileSystemWatcher watcher1;
            FileSystemWatcher watcher2;
            FileSystemWatcher watcher3;

            public MyService()
            {
                InitializeComponent();

                file = new FileInfo(@"D:\LOGS\Log.txt");
                writer = file.CreateText();
    //I mean this using
                using (watcher1 = new FileSystemWatcher(@"C:\"))
                {
                    watcher1.Created += OnChanged;
                    watcher1.Deleted += OnChanged;
                    watcher1.Renamed += OnRenamed;
                    watcher1.Changed += OnChanged;
                    watcher1.EnableRaisingEvents = true;
                }
    //I mean this using
                using (watcher3 = new FileSystemWatcher(@"C:\Users"))
                {
                    watcher3.IncludeSubdirectories = true;
                    watcher3.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite |
                                            NotifyFilters.FileName | NotifyFilters.DirectoryName;
                    watcher3.Created += OnChanged;
                    watcher3.Deleted += OnChanged;
                    watcher3.Renamed += OnRenamed;
                    watcher3.Changed += OnChanged;
                    watcher3.Filter = "*.*";
                    watcher3.EnableRaisingEvents = true;
                }
     //I mean this using
                using (watcher2 = new FileSystemWatcher(@"D:\"))
                {
                    watcher2.IncludeSubdirectories = true;
                    watcher2.Created += OnChanged;
                    watcher2.Deleted += OnChanged;
                    watcher2.Renamed += OnRenamed;
                    watcher2.Changed += OnChanged;
                    watcher2.EnableRaisingEvents = true;
                }
            }

[我的意思是使用下面的语句,在我的类的构造函数中,我使用FileSystemWatcher实例,在这样的类构造器中使用using语句是否有意义,否则它必须是...

c# constructor dispose using-statement
3个回答
2
投票

在运行服务时,应保持所有此FileSysteWatcher实例处于未处置状态。但是,在处理服务时,您还应该处理所有资源。因此,最好的解决方案是通过您的服务实现IDisposable并以Dispose方法处理所有资源。


0
投票

Sergeys的回答已经很好,我只想补充一些理论。


0
投票

您的意思是这样的?

© www.soinside.com 2019 - 2024. All rights reserved.