“ public static const string S =” stuff&quot ;;私のクラスで?

StackOverflow https://stackoverflow.com/questions/408192

  •  03-07-2019
  •  | 
  •  

質問

クラスをコンパイルしようとするとエラーが発生します:

  

定数 'NamespaceName.ClassName.CONST_NAME' は静的とマークできません。

行:

public static const string CONST_NAME = "blah";

これは常にJavaでできました。何が間違っていますか?そして、なぜそれが私にこれをさせないのですか?

役に立ちましたか?

解決

const オブジェクトは常に static です。

他のヒント

C#言語仕様から (PDF 287ページ-またはPDFの300ページ):

  

定数は考慮されますが   静的メンバー、定数   宣言は要求も   静的修飾子を許可します。

constメンバーは、コンパイラーによって静的であると見なされ、定数値の意味を暗示します。つまり、定数への参照は、メンバーへの参照ではなく、定数メンバーの値として使用コードにコンパイルされる場合があります。

つまり、値10を含むconstメンバーは、constメンバーへの参照ではなく、値10として使用するコードにコンパイルされる可能性があります。

これは、常にフィールドへの参照としてコンパイルされる静的な読み取り専用フィールドとは異なります。

これはpre-JITです。 JIT'terが登場すると、これらを値としてターゲットコードにコンパイルします。

C#の const は、Javaの final とまったく同じですが、絶対に常に static である点が異なります。私の意見では、 const 変数が非 static である必要はありませんが、 const 変数に非アクセスする必要がある場合、 static -ly、you can do:

class MyClass
{    
    private const int myLowercase_Private_Const_Int = 0;
    public const int MyUppercase_Public_Const_Int = 0;

    /*        
      You can have the `private const int` lowercase 
      and the `public int` Uppercase:
    */
    public int MyLowercase_Private_Const_Int
    {
        get
        {
            return MyClass.myLowercase_Private_Const_Int;
        }
    }  

    /*
      Or you can have the `public const int` uppercase 
      and the `public int` slighly altered
      (i.e. an underscore preceding the name):
    */
    public int _MyUppercase_Public_Const_Int
    {
        get
        {
            return MyClass.MyUppercase_Public_Const_Int;
        }
    } 

    /*
      Or you can have the `public const int` uppercase 
      and get the `public int` with a 'Get' method:
    */
    public int Get_MyUppercase_Public_Const_Int()
    {
        return MyClass.MyUppercase_Public_Const_Int;
    }    
}

まあ、今、私はこの質問が4年前に尋ねられたことに気付きましたが、さまざまな答え方やコードの書式設定のさまざまな方法を試すことで構成される約2時間の仕事をこの答えに入れたので、私はまだそれを投稿しています。 :)

しかし、記録のために、私はまだちょっとばかげていると感じています。

MSDNから: http://msdn.microsoft.com/en-us /library/acdd6hb7.aspx

...また、 constフィールドはコンパイル時の定数です、読み取り専用フィールドはランタイム定数に使用できます...

したがって、constフィールドでstaticを使用することは、C / C ++で(#defineを使用して)定義済みのstaticを作成しようとするようなものです。もちろん、コンパイル時に値に置き換えられるため、 = static)。

constはstaticに似ていますが、クラス名で両方の変数にアクセスできますが、diffはstatic変数を変更でき、constは変更できません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top