我正在构建一个文件监视器,它从一个文件中加载数据,该文件被放到SQL中的指定位置。除了将UI中的TextBoxes中输入的变量传递给MainWindow之外的另一个类外,我的所有代码都没问题。
首先我初始化一个FileWatcher:
public MainWindow()
{
InitializeComponent();
FileWatch.FileWatcherLoad();
}
调用文件观察程序进行初始化:
public static void FileWatcherLoad()
{
FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = //some path;
watcher.NotifyFilter = NotifyFilters.LastWrite;
watcher.Filter = "*.*";
watcher.Changed += new FileSystemEventHandler(OnChanged);
watcher.Created += new FileSystemEventHandler(OnChanged);
watcher.EnableRaisingEvents = true;
}
出现此问题是因为MainWindow强制我将FileWatcherLoad声明为静态类型。当我从File WatcherLoad()中删除静态类型时,我收到错误:
an object reference is required for the non-static field, method or property 'FileWatch.FileWatcherLoad()'
请注意,FileWatcherLoad()位于另一个类FileWatch中,它是MainWindow的子类。
这对我来说是一个问题,因为我希望在我的UI中的文本框中使用用户输入的数据,但这是非静态的,因此当我声明其他所有静态时会导致问题。
答案 0 :(得分:2)
当您调用FileWatch.FileWatcherLoad()
时,您告诉编译器您要调用静态方法。如果要调用非静态方法,则需要在对象上调用该方法。
如果要在当前对象上调用方法,可以调用this.FileWatcherLoad()
或FileWatcherLoad()
。
如果方法与您调用方法的类不在同一个类中,则需要首先初始化对象。
可以使用new
关键字来完成此操作。
var fileWatch = new FileWatch();
fileWatch.FileWatcherLoad();
答案 1 :(得分:0)
您必须执行以下操作:
FileWatch myWatch=new FileWatch();
然后调用你的方法等......
答案 2 :(得分:0)
这导致你调用它的方式static
成员函数的调用方式。如果您希望该方法为实例方法,则创建一个实例并将其称为
FileWatch watcher = new FileWatch();
watcher.FileWatcherLoad();
(或)只是new FileWatch().FileWatcherLoad()
现在您可以将方法声明为non-static
一个
public void FileWatcherLoad()
{
FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = //some path;
watcher.NotifyFilter = NotifyFilters.LastWrite;
watcher.Filter = "*.*";
watcher.Changed += new FileSystemEventHandler(OnChanged);
watcher.Created += new FileSystemEventHandler(OnChanged);
watcher.EnableRaisingEvents = true;
}