これは、C# のジェネリック クラスまたはメソッドにおける「構造体」の制限です。知りたい構造体のみ、またはint、double、enum、antなどの値型から派生した型を意味します。次のコードでは、単純型を使用できますか?
class SomeGenericClass <T> where T : struct
{
//some inplementation
}
これは、C# のジェネリック クラスまたはメソッドにおける「構造体」の制限です。知りたい構造体のみ、またはint、double、enum、antなどの値型から派生した型を意味します。次のコードでは、単純型を使用できますか?
class SomeGenericClass <T> where T : struct
{
//some inplementation
}
これはT
、値型のみが可能であることを意味します。struct
値の型は、キーワードと キーワードで定義されたデータ構造のみenum
です。
例えば、
struct A{}; //value-type
struct B{}; //value-type
class C{}; //reference-type
enum D {}; //value-type
SomeGenericClass<A> a; //ok
SomeGenericClass<B> b; //ok
SomeGenericClass<C> c; //compilation error - C is not value type
SomeGenericClass<D> d; //ok
、int
、およびその他の組み込み型に関してはdouble
、float
それらはすべて値型です。これらの各キーワードは、フレームワークで定義された構造体に対応しています。たとえば、int
基本的System.Int32
に 、 、 などdouble
ですSystem.Double
。
「構造体」制限とはどういう意味ですか?
これは、null 非許容値型を意味します。すべての構造体は値型です。
知りたい構造体のみ、またはint、double、enum、antなどの値型から派生した型を意味します。次のコードでは単純型を使用できますか?
、 、 などのいわゆる「単純型」はint
、double
および構造体に対応する C# キーワードにすぎず、に基づくenum
クラス(クラス自体であるにもかかわらず、列挙型も値型になります)。System.Int32
System.Double
System.Enum
System.ValueType
Enum
したがって、これらの型もwhere T : struct
通常の構造体とともに制約を満たします。
C# 言語仕様の章 4.1.10から引用:
逆に、null 非許容の値の型は、System.Nullable とその短縮形 T? 以外の値の型です。(任意の T の場合) に加えて、null を許容しない値の型になるように制約されている型パラメーター (つまり、struct 制約を持つ型パラメーター)。
はい、これは基本的に、Tが参照型ではなく値型に制限されていることを意味します。