非静态字段、方法或属性需要对象引用

本文关键字:属性 对象引用 方法 静态 字段 | 更新日期: 2023-09-27 18:18:36

嘿,我想让下面的代码工作,但目前我得到这个错误:

非静态字段、方法或对象引用是必需的属性"fetchFeedData.Program.txtUsername"

代码是:

class Program
{
    private string appDataPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "''feedReader";
    internal static extern IntPtr GetCurrentProcess();
    private WebClient imageClient;
    private String txtUsername = "xxxxxx@xxxxxx.com";
    private String txtPassword = "xxxxxxx";
    private Boolean chkDownVideo = false;
    private Boolean chkIsHD = false;
[STAThread]
static void Main(string[] args)
{
   bool isNew;
   Mutex mtx = new Mutex(true, "FacebookNewsfeedReader", out isNew);
   if (isNew) {
     InitializeXul();
     LoadSettings();
   } else
     MessageBox.Show("Already one instance is running.....", "Facebook Newsfeed Reader");
}
static void LoadSettings()
{
   imageClient = new WebClient();
   imageClient.Headers.Add("Accept", "image/webp,*/*;q=0.8");
   imageClient.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36");
   imageClient.Headers.Add("Referer", "https://www.zzzzzzzz.com/");
   imageClient.Headers.Add("Accept-Encoding", "gzip,deflate,sdch");
   imageClient.Headers.Add("Accept-Language", "en-US,en;q=0.8");
   string[] vals = data.Split(''n');
   if (vals.Length < 3)
      return;
   txtUsername = vals[0];
   txtPassword = vals[1];
   txtBrowseFolder = vals[2];
   chkDownVideo = bool.Parse(vals[3]);
   chkIsHD = bool.Parse(vals[4]);
}

在下面几行显示同样的错误:

imageClient = ...
imageClient.Headers.Add(...
imageClient.Headers.Add(...
imageClient.Headers.Add(...
imageClient.Headers.Add(...
imageClient.Headers.Add(...
appDataPath + ...
txtUsername = ...
txtPassword = ...
txtBrowseFolder = ...
chkDownVideo = ...
chkIsHD = ...

我搜索了一下,发现了持续的建议,以确保两者具有相同的函数调用(静态,void等),但这似乎并没有解决问题。

任何帮助将是伟大的!

非静态字段、方法或属性需要对象引用

我同意其他评论者的观点——这里真正缺少的是对static关键字的含义以及对实例化对象的含义的理解。

这里的具体问题是,你的Program类的字段需要一个实例才能被访问(Program和它的字段不是静态的),而你的Main方法是static

也就是说:

  1. 更改Program和它的字段为静态:static class Program
  2. 在使用LoadSettings之前实例化Program:

    static void LoadSettings()
    {
        //...
        Program p = new Program();
        p.txtUserName = vals[0];
        //...
    }
    
相关文章: