gpt4 book ai didi

c# - 在 C# 中删除 "static"引用

转载 作者:行者123 更新时间:2023-11-30 13:13:55 24 4
gpt4 key购买 nike

我最近开始学习 C#,但遇到了一个恼人的问题。我希望程序中的所有函数都可以使用的每个变量都必须在每个函数前面加上一个“静态”。我想知道的是如何尽可能避免这种情况?

此外,还有一个小问题:在函数内部创建公共(public)变量?

这就是我的程序现在的样子,我想基本上保持它的样子,而不必在任何地方添加“静态”:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Threading;
using System.Net.Sockets;

namespace NetworkExercise
{
class Client
{
public IPAddress addr;
public int port;
public string name;
public Thread thread;
public TcpClient tcp;
public NetworkStream stream;

public Client(IPAddress addr, int port, string name, NetworkStream stream)
{
}
}
class Program
{
//NETWORK
TcpListener tcpListener;
Thread listenThread;
ASCIIEncoding encoder = new ASCIIEncoding();
//DATA
byte[] buffer = new byte[4096];
string servIp;
int servPort;
//CLIENT MANAGEMENT
int clientNum;

static void Main(string[] args)
{
beginConnect();
}
public void beginConnect()
{
Console.Write("Server IP (leave blank if you're the host): ");
servIp = Console.ReadLine();
Console.Write("Port: ");
servPort = Console.Read();

tcpListener = new TcpListener(IPAddress.Any, servPort);
listenThread = new Thread(new ThreadStart(listenForClients));
listenThread.Start();
}
public void listenForClients()
{
tcpListener.Start();

Console.WriteLine("Listening for clients...");

while (true)
{
Client cl = new Client(null, servPort, null, null);
cl.tcp = tcpListener.AcceptTcpClient();
ThreadStart pts = delegate { handleClientCom(cl); };
cl.thread = new Thread(pts);
cl.thread.Start();
}
}
public void handleClientCom(Client cl)
{
cl.stream = cl.tcp.GetStream();
}

}

最佳答案

使用全局变量通常被认为是不好的做法,因为它们会增加耦合并损害可维护性,因此如果您发现自己经常使用它们,则应该重新考虑您的方法。如果您所有的代码都使用相同的几个变量,那么调试它可能会非常困难,因为您必须跟踪系统的全局状态并且您不知道程序的哪一部分一直在修改它。

此外,出于类似的原因,您几乎不应该在类中使用公共(public)字段。这样做允许客户端代码直接绑定(bind)到您的类的实现中,这样如果您更改类的内部机制,那么客户端代码就会中断。你应该使用的是 properties .

不过,要回答您的问题:不,如果您希望成员可以全局访问,它必须是静态的。否则,它仅存在于一个对象上,您需要引用该对象才能访问它。

您可能想在这里阅读的一些关键想法是 dependency injectionencapsulation .

关于c# - 在 C# 中删除 "static"引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2506521/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com