2012-01-14 10 views
0

Program.csで宣言された変数を使用して、その値にForm1.csからアクセスする方法を教えてください。C#でのファイルからファイルへの変数の受け渡し

私はCでこれを行う方法を知っているが、私は完全にC.

Program.csの上のMicrosoftの少しひねりで失われています:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Windows.Forms; 
using LuaInterface; 

namespace WindowsFormsApplication1 
{ 
    static class Program 
    { 
     public static Lua lua = null; 
     [STAThread] 
     static void Main() 
     { 
      Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 
      Application.Run(new Form1()); 
      lua = new Lua(); 
     } 
    } 
} 

の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.Windows.Forms; 
using LuaInterface; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      lua.DoString("print('hi')"); 
     } 

     private void textBox1_TextChanged(object sender, EventArgs e) 
     { 

     } 

     private void textBox2_TextChanged(object sender, EventArgs e) 
     { 

     } 

     private void button2_Click(object sender, EventArgs e) 
     { 
      textBox1.Text = ""; 
     } 
    } 
} 
+6

C#は "Cのねじれ"ではありません。そして、私はあなたが2つのクラスの間でパラメータを渡すことを意味すると思いますか?または2つのプログラムの間? – Oded

+0

複数のアプローチがあります。コードの一部を投稿してください。 –

+0

私は、あなたが見ることができるように、C#については何を話しているのか正確には分かりません。 2つのクラスが2つの別々のファイルにあるとすれば、それは私が言っていることだと思います。 –

答えて

3

Program.csForm1.csの例を使用し、これらがデフォルト名であり、Form1クラスをインスタンス化するProgramクラスがあると仮定しますあなたのProgram

private Lua lua; 

public Form1(Lua lua) : this() 
{ 
    this.lua = lua; 
} 

がデフォルトコンストラクタにこのパラメータとチェーンを取るForm1のコンストラクタを定義します。■あなたがForm1クラスにパラメータを渡したいことは、次の操作を行うことができますクラスForm1をインスタンス化するとき、それにパラメータを渡す:私はOOPの用語使用しています

lua = new Lua(); 
Application.Run(new Form1(lua)); 

注 - オブジェクトおよびクラス(ないファイル)。


更新:

あなたが Programクラスのパブリック静的メンバーどこでもあなたのプログラムでは、あなたが できアクセス、それを(名前空間が適切に宣言されていると仮定)などとしてあなた lua変数を宣言しているので

次の:

Program.lua; 

あなたははを呼び出す前に、静的フィールドをインスタンス化したいと思うけど。

これは、オブジェクトをすべてのスレッド間でパブリック共有リソースにします。マルチスレッド化すると、実質的にテストできず、作業が難しくなります。

0

また

Program.lua; 

でパラメータにアクセスすることができます。しかしオデッドの方法がクリーナーです。

メインに、オブジェクトは、Application.Run前にインスタンス化する必要があります:Program.csので

static void Main() 
    { 
     lua = new Lua(); 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     Application.Run(new Form1()); 
    } 
0

次のように定義された静的クラスおそらくあります:あなたが宣言すると

static class Program 
{ 
    ... 
} 

は、変数をpublicまたはinternalとすると、フォームからアクセスできます。フォームで

static class Program 
{ 
    public static int myVariable; 
    public static int MyProperty { get; set; } 
} 

、あなたが持つ変数やプロパティにアクセス:

オブジェクト指向プログラミングで
int i = Program.myVariable; 
int j = Program.MyProperty; 

を、あなたは通常、プライベート変数を保持し、唯一の公共としての特性を宣言します。

+1

静的クラスには静的変数があります。 – MPelletier

+0

はい、原因の。あなたが正しいです。私はそれを変えた。 –

関連する問題