簡體   English   中英

從靜態例程C#訪問方法

[英]Accessing a method from a static routine c#

我有一種方法

 private string sLogFormat;
        private string sErrorTime;

        public void CreateLogFile(string path, string msg)
        { 
            //sLogFormat used to create log files format :
            // dd/mm/yyyy hh:mm:ss AM/PM ==> Log Message
            sLogFormat = DateTime.Now.ToShortDateString().ToString() + " " + DateTime.Now.ToLongTimeString().ToString() + " ==> ";

            //this variable used to create log filename format "
            //for example filename : ErrorLogYYYYMMDD
            string sYear = DateTime.Now.Year.ToString();
            string sMonth = DateTime.Now.Month.ToString();
            string sDay = DateTime.Now.Day.ToString();
            sErrorTime = sYear + sMonth + sDay;

            StreamWriter sw = new StreamWriter(path + sErrorTime, true);
            sw.WriteLine(sLogFormat + msg);
            sw.Flush();
            sw.Close();

        }

另一個方法run()會在此處觸發Onchanged處理程序的某處(當更精確地更改文件夾內容時觸發)

 public static void Run()
        {
            // Create a new FileSystemWatcher and set its properties.
            FileSystemWatcher watcher = new FileSystemWatcher();
            watcher.Path = "C:/model_RCCMREC";

            /* Watch for changes in LastAccess and LastWrite times, and
               the renaming of files or directories. */
            watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName;
            //   watch wav files.
            watcher.Filter = "*.wav";

            // Add event handlers. 
            watcher.Created += new FileSystemEventHandler(OnChanged);

            // Begin watching.
            watcher.EnableRaisingEvents = true;
        }

和OnChanged處理程序為

public static  void OnChanged(object source, FileSystemEventArgs e)
        {  
            try
            { 

                //access last folder(newly created one is suposedly at last position)
                var directory = new DirectoryInfo("C:/model_RCCMREC");
                var myFile = (from f in directory.GetFiles() orderby f.LastWriteTime descending select f).First();

                //2.Split the file name.
            }


            catch
            {
//I WANT TO ACCESS THE METHOD CreateLogFile(x,y) HERE

            }
        }

我通常無法從OnChanged處理程序訪問方法CreateLogFile()。如何訪問它?

看來OnChanged應該是非靜態的。 通常,只有特定實例會調用OnChanged。 這是因為事物本身發生變化的情況被概括為自身發生的情況。 從OnChanged中刪除靜態變量,一切順利。

或者,如果您不能/不想將OnChanged設置為非靜態,則可以將CreateLogFile設置為靜態,我看不出有任何理由會在方法之外取消使用變量:

    public static void CreateLogFile(string path, string msg)
    { 
        string sLogFormat;
        string sErrorTime;

        //sLogFormat used to create log files format :
        // dd/mm/yyyy hh:mm:ss AM/PM ==> Log Message
        sLogFormat = DateTime.Now.ToShortDateString().ToString() + " " + DateTime.Now.ToLongTimeString().ToString() + " ==> ";

        //this variable used to create log filename format "
        //for example filename : ErrorLogYYYYMMDD
        string sYear = DateTime.Now.Year.ToString();
        string sMonth = DateTime.Now.Month.ToString();
        string sDay = DateTime.Now.Day.ToString();
        sErrorTime = sYear + sMonth + sDay;

        StreamWriter sw = new StreamWriter(path + sErrorTime, true);
        sw.WriteLine(sLogFormat + msg);
        sw.Flush();
        sw.Close();

    }

您有兩種方法:

1-如果您的Logger類是非靜態的,則使用YourLoggerClass創建一個新的記錄器對象log = new YourLoggerClass(); 做空

2-將您的Logger類設為靜態,這使您可以在任何地方輕松使用它:

private static string sLogFormat;
private static string sErrorTime;

public static void CreateLogFile(string path, string msg)
{
     ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM