2012-02-07 21 views
2

私は何かに取り組んでおり、クラスをインスタンス化する必要があります。私の質問はどこでそれをやるのだろうか?私はこの前にそれを行うだろう。ここではクラス内でインスタンス化

public partial class Form1 : Form 
    { 
     InputClass myclass = new InputClass(); 
     public Form1() 
     { 
      InitializeComponent(); 
     } 


Or 

public partial class Form1 : Form 
    { 

     public Form1() 
     { 

     InputClass myclass = new InputClass(); 

      InitializeComponent(); 
     } 

は、私が働いている別のコードですが、それはよくこれに出て働いていない私のコードが今のように見えるものです:

public partial class Form1 : Form 
{ 


    InputClass myClass = new InputClass(); 
    myClass.yourname = ""; 
    myClass.Banner = ""; 

public Form1() 
    { 
     InitializeComponent(); 
    } 

私は新しいです私はこれを理解しようとしています。クラスをインスタンス化する必要があります。次に、page loadが_banner変数からラベルテキストを設定するために追加されます。次に、ユーザーがボタンを押したときにテキストボックスのテキストからプロパティyournameを設定するコードを追加します。それから私はテキストボックスをクリアする必要があります。クラスからメッセージボックスに名前を表示する必要もあります。

class InputClass 
{ 
    public string _banner; 
    private string _yourName; 

    public InputClass(String _banner) 
    { 
     this._banner = _banner; 
    } 

    public string yourName 
    { 
     get { return _yourName; } 
     set { _yourName = value; } 
    } 

} 

}

+1

あなたが言おうとしているかを明確だろうか? – onatm

+0

「うまくいきません」 - より具体的にできますか?コンパイルエラーが発生するか、プログラムが期待どおりに動作しませんか?具体的に何が動作していないのか、正確なエラーは何ですか? –

+0

'WindowsFormsApplication1.InputClass'には0の引数を取るコンストラクタが含まれていません\t 'WindowsFormsApplication1.Form1.myClass'は 'フィールド'ですが、 'タイプ'のように使用されます\tこれらのエラーは私が得るものです。 – snorris

答えて

5

あなたのクラスの他のメソッドから、あなたのオブジェクトにアクセスしたいなら、あなたはメンバーのフィールドではなくローカル変数を使用する必要があります。

private InputClass myClass = new InputClass { YourName = "", Banner = "" }; 

public Form1() 
{ 
    InitializeComponent(); 
} 

別のオプションは、メンバーフィールドを宣言したが、コンストラクタ内でそれを初期化することです:

private InputClass myClass; 

public Form1() 
{ 
    InitializeComponent(); 
    this.myClass = new InputClass { YourName = "", Banner = "" }; 
} 

これはあなたの特定のケースではあまり有用ではないですが、あなたが通過する必要がある場合、それは便利ですあなたのコンストラクタからInputClassコンストラクタまでのパラメータ。

1

機能体内でのみプロパティを設定できます。クラスの文脈の中ではない。

クラスをインスタンス化すると、Form1()または宣言時に機能します。 IMOあなたのケースで最高のスタイルは、次のようになります。これは、1は、Form1のコンストラクタではなく、他の関数ではないだけのMyClassを使用することができます

public partial class Form1 : Form 
{ 

    InputClass myclass; 
    public Form1() 
    { 
     InitializeComponent(); 
     myclass = new InputClass(); 
    } 
} 

1

まず、宣言とインスタンス化を区別します。最初のスニペットでは、InputClassメンバーをクラススコープ内で宣言しています。つまり、クラス内のすべてのメソッドで共有されます。一度それを行うと、それはコンストラクタで宣言しているか宣言中にインスタンス化するかどうかは関係ありませんが、(ほとんど)同じことが成り立ちます。

第2に、「ページの読み込み」を参照するので、これはASP.NETプロジェクトであると推測しています。その場合は、Form1インスタンスがページ読み込みの間に生き残っていないことに注意してください。ページをリロードするたびに、F5キーを押すか、ボタンクリック/ポストバックを介して、Form1の新しいインスタンスが作成され、InputClassの新しいインスタンスが作成されます。

1

最初の例では、myclassという名前のForm1のメンバー変数を宣言しています。あなたは大丈夫です同じ場所、でそれに値を割り当てることができます

public partial class Form1 : Form 
{ 
    InputClass myclass = new InputClass(); 
    public Form1() 
    { 
     InitializeComponent(); 
    } 
} 

しかし、あなたは通常、(割り当てmyClass.yourname = ""のように)あなたのクラス宣言内の実際のコードステートメントを挿入することはできません。それらをコンストラクタに配置する必要があります。だから、これを行うための正しい方法は次のようになります。ボタンのクリックでアクションを実行するための

public partial class Form1 : Form 
{ 
    InputClass myClass = new InputClass(); 

    public Form1() 
    { 
     myClass.yourname = ""; 
     myClass.Banner = ""; 
     InitializeComponent(); 
    } 
} 

、ここを見て:http://msdn.microsoft.com/en-us/library/43sxkdeb(v=vs.80).aspx

関連する問題