我想在C#中创建一个简单的TCP服务器,所以我想定义一些变量,但是我无法访问我声明的变量。是否有可能绕过这个?
当前代码:
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;
using System.Net;
using System.Net.Sockets;
namespace TCP_Server_gui
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
string serverIp = "127.0.0.1";
int serverPort = 4200;
IPAddress localAdd = IPAddress.Parse(serverIp);
TcpListener listener = new TcpListener(localAdd, serverPort);
}
}
我收到了这些错误:
Severity Code Description
Error CS0236 A field initializer cannot reference the non-static field, method, or property 'Form1.serverIp'
Error CS0236 A field initializer cannot reference the non-static field, method, or property 'Form1.localAdd'
Error CS0236 A field initializer cannot reference the non-static field, method, or property 'Form1.serverPort'
答案 0 :(得分:3)
将非常量初始值设定项放在构造函数中:
public Form1()
{
InitializeComponent();
localAdd = IPAddress.Parse(serverIp);
listener = new TcpListener(localAdd, serverPort);
}
string serverIp = "127.0.0.1";
int serverPort = 4200;
IPAddress localAdd;
TcpListener listener;
}
原因是因为无法保证字段初始化程序以任何特定顺序运行,因此无法保证在初始化程序时初始化serverIp
用于IPAddress
次运行。如果将它们放在构造函数中,则可以控制订单。
答案 1 :(得分:3)
C#是一种严格的面向对象语言(对于OOP:P的某个定义),所以没有C风格的变量。相反,你有字段和本地人。
在您的情况下,您已声明了多个字段。但是,字段(与C风格的变量和C#的本地字符不同)没有定义的执行顺序,因此它们的初始值设定项不能相互引用。相反,您需要将初始化器移动到构造函数:
public Form1()
{
InitializeComponent();
localAdd = IPAddress.Parse(serverIp);
listener = new TcpListener(localAdd, serverPort)
}
string serverIp = "127.0.0.1";
int serverPort = 4;
IPAddress localAdd;
TcpListener listener;
答案 2 :(得分:1)
你必须在表单构造函数中调用你的方法:
localAdd
如果您希望在班级中全局访问listener
和public partial class Form1 : Form
{
string serverIp = "127.0.0.1";
int serverPort = 4200;
IPAddress localAdd;
TcpListener listener;
public Form1()
{
InitializeComponent();
localAdd = IPAddress.Parse(serverIp);
listener = new TcpListener(localAdd, serverPort);
}
}
,那么您必须将它们移到构造函数之外:
transform: scale(x)