私の知る限り、それはC#では機能しません。フィールドを使用するか、プロパティ/メソッドで変数を作成できます。VB.NETには、Static
ローカル変数のキーワードがあります(以下を参照)。
多くの派生クラスがあり、派生クラスごとに静的フィールド配列を使用したくないとコメントしました。その場合は、別のアプローチを使用することをお勧めします。基本クラスで静的クラスを使用し、Dictionary
派生クラスごとに列挙型を使用できます。
abstract class Base
{
public abstract DerivedType Type { get; }
protected static readonly Dictionary<DerivedType, int[]> SomeDict;
static Base()
{
SomeDict = new Dictionary<DerivedType, int[]>();
SomeDict.Add(DerivedType.Type1, new int[] { 1, 2, 3, 4 });
SomeDict.Add(DerivedType.Type2, new int[] { 4, 3, 2, 1 });
SomeDict.Add(DerivedType.Type3, new int[] { 5, 6, 7 });
// ...
}
public static int[] SomeArray(DerivedType type)
{
return SomeDict[type];
}
}
public enum DerivedType
{
Type1, Type2, Type3, Type4, Type5
}
class Derived : Base
{
public override DerivedType Type
{
get { return DerivedType.Type1; }
}
}
ただし、VB.NETでは、 -keywordを使用して静的ローカル変数を使用することができます。Static
MustInherit Class Base
Public MustOverride ReadOnly Property someArray() As Integer()
End Class
Class Derived
Inherits Base
Public Overrides ReadOnly Property someArray() As Integer()
Get
Static _someArray As Int32() = New Integer() {1, 2, 3, 4}
Return _someArray
End Get
End Property
End Class
_someArray
のすべてのインスタンスで同じになりますDerived
。