3

これは、C# のジェネリック クラスまたはメソッドにおける「構造体」の制限です。知りたい構造体のみ、またはint、double、enum、antなどの値型から派生した型を意味します。次のコードでは、単純型を使用できますか?

class SomeGenericClass <T> where T : struct
{
 //some inplementation
}
4

3 に答える 3

3

これは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、およびその他の組み込み型に関してはdoublefloatそれらはすべて値型です。これらの各キーワードは、フレームワークで定義された構造体に対応しています。たとえば、int基本的System.Int32に 、 、 などdoubleですSystem.Double

于 2011-10-06T07:30:06.803 に答える
3

「構造体」制限とはどういう意味ですか?

これは、null 非許容値型を意味します。すべての構造体は値型です。

知りたい構造体のみ、またはint、double、enum、antなどの値型から派生した型を意味します。次のコードでは単純型を使用できますか?

、 、 などのいわゆる「単純型」はintdoubleおよび構造体に対応する C# キーワードにすぎず、に基づくenumクラス(クラス自体であるにもかかわらず、列挙型も値型になります)。System.Int32System.DoubleSystem.EnumSystem.ValueTypeEnum

したがって、これらの型もwhere T : struct通常の構造体とともに制約を満たします。

于 2011-10-06T07:35:08.210 に答える
0

C# 言語仕様の章 4.1.10から引用:

逆に、null 非許容の値の型は、System.Nullable とその短縮形 T? 以外の値の型です。(任意の T の場合) に加えて、null を許容しない値の型になるように制約されている型パラメーター (つまり、struct 制約を持つ型パラメーター)

はい、これは基本的に、Tが参照型ではなく値型に制限されていることを意味します。

于 2011-10-06T07:35:16.237 に答える