1

クラス Form1で上で定義された user_name があります: Form

そして、user_name は上で次のように定義されています。

string user_name = "Rammy";

下の行でこのuser_nameを使用したいのですが、実行されておらず、「フィールド初期化子は非静的フィールド、メソッド、またはプロパティを参照できません」というエラーが発生します。

string copyright_bottom_text = user_name;

誰かがこれを手伝ってくれますか?Visual Studio 2012 を使用しています。

4

2 に答える 2

4

行の下をコンストラクターまたはメソッドに移動します

string copyright_bottom_text = user_name;

コンパイラ エラー CS0236

インスタンス フィールドを使用して、メソッド外の他のインスタンス フィールドを初期化することはできません。メソッドの外部で変数を初期化しようとしている場合は、クラス コンストラクター内で初期化を実行することを検討してください。詳細については、「メソッド (C# プログラミング ガイド)」を参照してください。

public class MyClass
{
   public int i = 5;
   public int j = i;  // CS0236
   public int k;      // initialize in constructor

   MyClass()
   {
      k = i;
   }

   public static void Main()
   {
   }
}
于 2013-09-15T14:24:28.120 に答える
0

おそらく、静的メソッドから user_name 変数にアクセスしようとしています。静的およびインスタンス変数/メソッドがあります。静的なものはクラス自体に属し、そのクラスから作成されたインスタンスには属しません。すべてのインスタンスはクラスを介してデータにアクセスしますが、それを変更すると、すべてのインスタンスに対して変更されます - もちろん、それはクラスに属しているためです。これはどのように見えるかです: class Something { private static string StaticString = "私はクラスに属しています"; ... //constructor ... } 次に、このクラスのインスタンスを作成すると、次のようになります。string x = s.StaticString; とは言えません。インスタンス「s」ではなく、クラス「Something」に属しているためです。ただし、string x = Something.StaticString; と言うことができます。

あなたの例では、静的メソッドからインスタンス変数に到達しようとしています。これは上記の反対です: user_name は各インスタンスで一意です (たとえば、Joe という名前のインスタンス、Robert という名前のインスタンスなどを持つことができます)。しかし、あなたはそれをクラスレベルで使おうとします。クラスは、それに基づいて作成されたインスタンスについて何も知りません。犬に名前を付けるとき、すべての犬に同じ名前を付ける必要があるようなものです。動いていない。

静的文字列を user_name として使用してみてください。コンパイルは行われますが、正しくありません。代わりに、変数をインスタンス変数 (静的ではない) として保持し、インスタンス メソッドで使用します (静的ではありません)。インスタンスメソッドでは静的メソッドと変数を使用できますが、静的メソッドではインスタンス変数またはメソッドを使用できないことに注意してください。

お役に立てば幸いです。:)

于 2013-09-15T14:34:01.903 に答える