C# Windows 窗体应用程序,两个带有一个字符串变量的 .cs 文件

Posted

技术标签:

【中文标题】C# Windows 窗体应用程序,两个带有一个字符串变量的 .cs 文件【英文标题】:C# Windows Forms Application, two .cs files with one string variable 【发布时间】:2021-07-28 02:43:55 【问题描述】:

我有两个 .cs 文件,我想使用一个按钮来更改字符串通道的值,但它调用错误 CS0236:(字段初始化程序无法引用非静态字段、方法或属性),请帮助我,我是找了两天的解决办法。谢谢。

在 Form1.cs 我有

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace TwitchChatBot

    public partial class Form1 : Form
    
        string channel;
        //this line is a problem
        IrcClient irc = new IrcClient("irc.twitch.tv", 6667, "nickname", "password", channel);

在 IrcClient.cs 我有

using System;
using System.Collections.Generic;
using System.IO;
using System.Net.Sockets;
using System.Text;

namespace TwitchChatBot

    public class IrcClient
               
        private string userName;
        private string channel;

        private TcpClient tcpClient;
        private StreamReader inputStream;
        private StreamWriter outputStream;

        public IrcClient(string ip, int port, string userName, string password, string channel)
        
            this.userName = userName;
            this.channel = channel;

            tcpClient = new TcpClient(ip, port);
            inputStream = new StreamReader(tcpClient.GetStream());
            outputStream = new StreamWriter(tcpClient.GetStream());

            outputStream.WriteLine($"PASS password");
            outputStream.WriteLine($"NICK userName");
            outputStream.WriteLine($"USER userName 8 * :userName");
            outputStream.WriteLine($"JOIN #channel");
            outputStream.Flush();
        

【问题讨论】:

你究竟是从哪里得到这个错误的? 这能回答你的问题吗? A field initializer cannot reference the nonstatic field, method, or property @KlausGütter 当我用字符串频道更改“频道”时 如果您显示演示问题的代码而不是不显示问题的代码会很好。您可以将文件的初始化放入构造函数或其他方法中。 @KlausGütter 我已经编辑了这个问题,也许这样更好。 【参考方案1】:

将您的 irc 类的实例化移动到构造函数,而不是将其放在类成员本身中。

public partial class Form1 : Form

  string channel = string.Empty;
  IrcClient irc;
  public Form1()
  
    InitializeComponent();
    irc = new IrcClient("irc.twitch.tv", 6667, "nickname", "password", channel);
  

或者更好的是,添加某种“连接”按钮,并在您通过文本框或其他方式真正了解频道后在其中创建它。

【讨论】:

非常感谢。这对我帮助很大。谢谢

以上是关于C# Windows 窗体应用程序,两个带有一个字符串变量的 .cs 文件的主要内容,如果未能解决你的问题,请参考以下文章

C#的两个控件在窗体移动。

C# 数据绑定 ComboBox 在其他控件中更改数据

如何正确暂停/延迟 Windows 窗体应用程序

如何在 Windows 窗体 C# 中伪造鼠标光标位置?

JetBrains Rider C# | Windows 窗体 UI [关闭]

C# Windows 窗体 - 带有事件的不可见元素(单击和 MouseEnter/Leave)