1 回答

TA貢獻(xiàn)2037條經(jīng)驗(yàn) 獲得超6個(gè)贊
在下面的示例中,我在 MainGame 類本身中創(chuàng)建并存儲(chǔ)了一個(gè) MainGame 實(shí)例。因?yàn)檫@是從靜態(tài) Main() 完成的,所以聲明也必須是靜態(tài)的。請(qǐng)注意,如果進(jìn)行了此聲明public,則可以使用語(yǔ)法從任何地方訪問它MainGame.mg(但是,這不是推薦的方法)。
接下來(lái),我們通過該行中的 Constructor 將該 MainGame 實(shí)例傳遞給MainConsole表單Application.Run()。請(qǐng)注意下面發(fā)布的 MainConsole 中的附加構(gòu)造函數(shù)。返回類型中的“ref”checkCommands()已被刪除,因?yàn)榭梢栽?MainConsole 本身中使用傳遞和存儲(chǔ)的對(duì) MainGame 的引用更改該值。
主游戲類:
public class MainGame
{
public string Connected_IP = " ";
public short Is_Connected = 0;
static MainGame mg = null; // instantiated in Main()
static void Main()
{
mg = new MainGame(); // this instance will be worked with throughout the program
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainConsole(mg)); // pass our reference of MainGame to MainConsole
}
public string checkCommands(string command) // no "ref" on the return type
{
IP_DataBase ips = new IP_DataBase();
/*checking for ips in the list*/
string[] dump;
if (command.Contains("connect"))
{
dump = command.Split(' ');
for (int i = 0; i < ips.IPS.Length; i++)
{
if (dump[1] == ips.IPS[i])
{
Connected_IP = dump[1];
Is_Connected = 1;
break;
}
else
{
Connected_IP = "Invalid IP";
Is_Connected = 0;
}
}
}
else if (command.Contains("quit")) /*disconnect command*/
{
Connected_IP = "Not Connected";
Is_Connected = 0;
}
return Connected_IP;
}
}
在這里,在 MainConsole 表單中,我們添加了一個(gè)額外的構(gòu)造函數(shù)來(lái)接收 MainGame 的實(shí)例。有一個(gè)名為mMainGame 類型的字段,但請(qǐng)注意,在這種形式中,我們實(shí)際上沒有使用“new”創(chuàng)建 MainGame 的實(shí)例;我們只使用傳入的實(shí)例。對(duì) MainGame 的引用存儲(chǔ)在m構(gòu)造函數(shù)中,以便它可以在代碼的其他點(diǎn)使用:
public partial class MainConsole : Form
{
// Note that we are NOT creating an instance of MainGame anywhere in this Form!
private MainGame m = null; // initially null; will be set in Constructor
public MainConsole()
{
InitializeComponent();
}
public MainConsole(MainGame main)
{
InitializeComponent();
this.m = main; // store the reference passed in for later use
}
private void ConsoleInput2_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Return && ConsoleInput2.Text.Trim().Length > 0)
{
// Use the instance of MainGame, "m", that was passed in:
Text_IP_Connected.Text = m.checkCommands(ConsoleInput2.Text);
vic_sft.Enabled = (m.Is_Connected == 1);
}
}
}
- 1 回答
- 0 關(guān)注
- 95 瀏覽
添加回答
舉報(bào)