0856デフォルトの名無しさん (ワッチョイ 13b9-0DuE)
2019/11/23(土) 22:00:39.91ID:6Id8VYs40以下のようなクラスを作りたいと考えています。
class MyStaticClass1
{
static double HighCostMethod() { ... }
public static double X = Math.Sign(HighCostMethod());
public static double Y = Math.Abs(HighCostMethod());
}
しかし高コストな HighCostMethod を2回も呼びだすのは無駄なので
以下のように改良しました。
class MyStaticClass2
{
static double HighCostMethod() { ... }
public static double X, Y;
static MyStaticClass2()
{
var v = HighCostMethod();
X = Math.Sign(v);
Y = Math.Abs(v);
}
}
ところがこのコードは規則 CA1810 に違反すると警告が表示されました。
静的コンストラクターにはパフォーマンス上の欠点があるようなのです。
【CA1810 参照型の静的フィールドをインラインで初期化します - Visual Studio Microsoft Docs】
https://docs.microsoft.com/ja-jp/visualstudio/code-quality/ca1810?view=vs-2019
(続く)