最も可能性の高い作業コード:
public static class TestClass
{
public const int constValue1 = 1;
public const int constValue2 = 2;
public const int constValue3 = 3;
}
enum TestEnum
{
testVal1, testVal2, testVal3
}
public int TestFunction(TestEnum testEnum)
{
switch (testEnum)
{
case TestEnum.testVal1:
return TestClass.constValue1;
case TestEnum.testVal2:
return TestClass.constValue2;
case TestEnum.testVal3:
return TestClass.constValue3;
}
return 0; // all code paths have to return a value
}
まず、const (C# リファレンス)によると:
constキーワードは、フィールドまたはローカル変数の宣言を変更するために使用されます。フィールドまたはローカル変数の値が定数であることを指定します。これは、変更できないことを意味します。
C# ではconst
、フィールド ( など) またはローカル変数の修飾子としてのみ使用されTestClass.constValue1
、関数の戻り値の型には適していません。
あなたは偉大な C/C++ 王国の出身です。C/C++ に関する私の非常に限られた知識で考えると、C/C++ のconst
戻り値の型はポインターでのみ意味があります...
// C++ code
const int m = 1;
// It returns a pointer to a read-only memory
const int* a(){
return &m;
}
ただし、安全でないコードを使用していない限り、C# にはポインターがありません。値型( int
/ DateTime
/ TestEnum
/structs など) と参照型( string
/classes など)しかありません。ウェブ上で読むべきものは他にもたくさんあります。
したがってint
、C# の値型と同様に、それを返すとコピーされます。したがって、「定数」を返している場合でもint
、戻り値は定数ではなく、戻り値を変更しても「定数が変更されて SegFault が発生する」ことはありません。
さて、質問に答えるのを忘れていました...
関数の戻り値の型はどのくらい正確ですか? (私はオブジェクトの戻り値の型を使用していますが、これはエラーをスローしません)
上記のコードで示したように、int
. 変更してはならないタイプ
const int blah = 1
の変数/フィールドのみを宣言します(実行することにより)。C#では型ではありません。blah
int
blah = 2
const int
同じことを達成するための他のオプションはありますか?
うーん、これは特に答える必要はないと思いますが…