2011-02-02 14 views
1

iはForm1.csをファイルにC#、クラスから変数にアクセスする?

 public int MyVariable; 

を持っている、と私はClass1.csのからアクセスしたいと、あなたはそれを行うための最善の方法だろうどう思いますか?

ありがとうございます!

+4

これは本当にあいまいな質問です。これら2つのクラスの関係は何ですか?あなたのForm1はClass1のインスタンスへの参照を持っていますか? – ArielBH

+1

うわー、この質問に答えるためには、もっと多くの文脈が必要です。 – Jamiec

+1

ロブ、それはあなたの緊急の必要性は実際には、オブジェクト指向の基礎チュートリアルだと思われる。ここで犯罪はありません。 –

答えて

1

シナリオによって異なります。しかし、理想的には、フォーム要素は、それらを使用する必要がある関数に渡されます。

0

変数をstaticにします。その後、Form1.MyVariableのように呼び出すことができます。

+4

質問に答えるかもしれませんが、本当に悪いデザインの始まりのように聞こえます。 –

+0

は、 "static int MyVariable;"、class1.csはForm1.MyVariableを認識しませんでした。( – Rob

+2

InversionOfControlの代わりにho1これがLoD =デザインのleackです) –

3

MSDN: Properties

プロパティを持つ基本クラス:

class Person 
{ 
    private string name; // the name field 
    public string Name // the Name property 
    { 
     get 
     { 
      return name; 
     } 
     set 
     { 
      name = value; 
     } 
    } 
} 

Auto Implemented Properties( "名前" で高度な作業が必要とされていない場合):プロパティにアクセス

class Person 
{ 
    public string Name { get; set; } // the Name property with hidden backing field 
} 

クラス:

Person person = new Person(); 
person.Name = "Joe"; // the set accessor is invoked here     

System.Console.Write(person.Name); // the get accessor is invoked here 
+0

これはベストプラクティスの1つであり、どこでも共通の標準として使用されています。 WernerCDが言ったように上記を使い、あなたが望むものを達成するでしょう。 STATIC変数を使用しないでください。本当に必要な場合は、STATICキーワードが重要な意味を持つため、 – msbyuva

0

このようにしてみてください:

(1)の場合、MyClass.MyIntを読み取り専用にすることができます。

public class MyForm : System.Windows.Forms.Form 
{ 
    int myInt; 

    public MyForm() 
    { 
     myInt = 1; 

     //1 
     var myClass = new MyClass(myInt); 

     //2 
     myClass.MyInt = myInt; 
    } 
} 

public class MyClass 
{ 
    public int MyInt { get; set; } 

    public MyClass(int myInt) 
    { 
     MyInt = myInt; 
    } 
} 
1

あなたは、いくつかのオプションがあります。

  1. は、それを使っているクラス/メソッドに値を渡します。これが好ましいシナリオです。クラスがこの値に依存している場合は、クラスに値を渡します。クラスを探しに行かせないでください。 (参照:依存関係の反転原理)
  2. 値を静的にします。次に、他のクラスはその値を参照できます。もちろん、インスタンスと静的の違いに注意してください。値は常に同じであり、コンストラクタやその他のロジックではなく、メンバの定義で指定する必要があります。
  3. クラス内のフォームのインスタンス(それ自体が単なるクラス)を作成し、そのインスタンス上のpublicメンバーにアクセスします。これは、作成しているインスタンスが「ページ上で実行中のインスタンス」ではないため、必要なものとは思われません。 (これは上記の原則にも違反しています)
  4. フォームへの参照(this)をクラスに渡し、その参照のメンバーを参照してください。

さらに、変数ではなくパブリックメンバーのプロパティを作成する傾向があります。ほとんどの場合、プロパティは変数を取得/設定するだけで、それ以上のものはありません。しかし、何かを追加する必要がある場合は、互換性を損なうことなくこれを行うことができます。変数をプロパティに変更すると、クラスのフットプリントが変更され、そのクラスを使用するものが分割されます。

+0

何が問題なのですか? http://stackoverflow.com/questions/15677629/how-to-set-mdiparent-property-of-child-form-in-nonmdi-class – Volatil3