3
const Vector4 colorBlack = new Vector4(0,0,0,1);//Vector4 is struct
public static void example(Vector4 color = colorBlack) //not ok
{
   //do something
}
const int someInt = 0;
public static void exampleInt(int n = someInt) // ok
{

}

「コンパイル時定数」とは正確には何なのか知りたいです。ここから、それは述べています

const としてマークされたメンバーのすべてのインスタンスがコンパイル中にその値に置き換えられ、読み取り専用メンバーは実行時に解決されることを意味します。

したがって、colorBlack を const として持っている場合、それはコンパイル時の定数になると想定しましたが、コンパイラはそうではないと教えてくれます。しかし、「const int some int = 0;」について文句はありません。コンパイル時定数です。

なんで?

4

1 に答える 1

2

C# 4.0 で既定の Color パラメーターを指定できますか? を参照してください。

また:構造体のデフォルト引数

セクション 7.15で説明されているように、定数式はコンパイル時に完全に評価できる式です。文字列以外の参照型の null 以外の値を作成する唯一の方法は new 演算子を適用することであり、new 演算子は定数式では許可されていないため、参照型の定数に可能な唯一の値string 以外は null です。

つまり、コンパイル時には、次のデフォルトのみを指定できます。

  • ヌル
  • リテラル文字列
  • new T() // 引数なし、または同等の default(T)

デフォルト引数を使用している場合にのみ new を使用でき、参照型 (構造体) ではそれを行うことができず、とにかくいくつかの特定の引数を指定する必要があるため、唯一のオプションは null を渡すことです。

const Vector4 colorBlack = new Vector4(0,0,0,1);  // Vector4 is struct
public static void example(Vector4? color = null) // ? makes it nullable
{
    if (color == null)
        color = colorBlack;
}
于 2014-03-15T06:01:07.603 に答える