MainWindow()强制静态,但我需要调用非静态参数(C#)

时间:2017-07-12 13:12:11

标签: c#

我正在构建一个文件监视器,它从一个文件中加载数据,该文件被放到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中的文本框中使用用户输入的数据,但这是非静态的,因此当我声明其他所有静态时会导致问题。

3 个答案:

答案 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;
    }