试图找出答案。.搜索了一段时间,但没有找到任何地方。
我在form1中有以下代码,并且运行良好。
Connection.tanv = txtUser.Text;
Connection.tpass = txtPasswd.Text;
try {
connection = new MySqlConnection("datasource=localhost;port=3306;database=Diary;username=" + Connection.tanv + ";password=" + Connection.tpass + "");
在名为Connection的类中,我有以下代码
public class Connection
{
public static string tanv { get; set; }
public static string tpass { get; set; }
public static string strcon = "datasource=localhost;port=3306;database=Diary;username=" + tanv + ";password=" + tpass + "";
}
例如,当我这样做
Messagebox.Show(Connection.tanv);
我得到正确的信息
但是当我尝试做
Messagebox.Show(Connection.strcon);
我只得到文本而不是其他字符串的信息...我在做什么错了?
答案 0 :(得分:2)
id
这是一个静态字段。初始化一次。初始化时,public static string strcon = "datasource=localhost;port=3306;database=Diary;username=" + tanv + ";password=" + tpass + "";
和tanv
仍为tpass
,因此这无济于事。
您希望字符串连接在每次请求null
时发生。为此,使其成为属性:
strcon
答案 1 :(得分:2)
计算机程序按顺序执行。您的执行顺序大致为:
Connection
类分配空间。为Connection
类执行静态初始化:
a。 tanv = null
b。 tpass = null
c。 strcon = string.Concat("datasource=localhost;port=3306;database=Diary;username=", tanv, ";password=", tpass)
运行其他代码
a。设置tanv
b。设置tpass
c。阅读strcon
。
如您所见,tanv
和tpass
的值是在步骤3中设置的,为时已晚,无法在步骤2中通过string.Concat
操作找到。
一种解决方法是,不将string.Concat
的结果保存在静态变量中,而是在每次阅读strcon
时重复该结果。这是通过创建一个字段来完成的。 hvd显示了C#7中可用的闪亮新方法;对于以前的版本,您需要编写
public static string strcon
{ get { return "datasource=localhost;port=3306;database=Diary;username=" + tanv + ";password=" + tpass + ""; } }
答案 2 :(得分:0)
lsof -i :8080 //returns the PID (process id) that runs on port 8080
kill 1234 //kill the process using PID (used dummy PID here)
lsof -i :8443
kill 4321
属性在strcon
和tanv
属性尚未填写时被初始化。使用getter实现tpass
属性,然后它将反映strcon
和tanv