是否有可能设计一个C#类,通过反射查询它会将自己标记为正IsValueType和正IsClass?

G.Y*_*G.Y 9 .net c# reflection

是否有可能设计一个C#类,通过反射查询它会将自己标记为正IsValueType和正IsClass?

或者它们实际上是相互排斥的标记?

我知道,

大多数原始类型将返回(包括枚举和结构):
IsValueType = true,IsClass = false.

字符串或任何类 - 摘要也是.. return:
IsValueType = false,IsClass = true.

接口返回:
IsValueType = false,IsClass = false

ill*_*ant 7

是否有可能设计一个C#类,通过反射查询它会将自己标记为正IsValueType和正IsClass?

我们来看看这些实现:

protected virtual bool IsValueTypeImpl()
{
      return this.IsSubclassOf((Type) RuntimeType.ValueType);
}

public bool IsClass
{
  [__DynamicallyInvokable] get
  {
    if ((this.GetAttributeFlagsImpl() & TypeAttributes.ClassSemanticsMask) == TypeAttributes.NotPublic)
      return !this.IsValueType;
    else
      return false;
  }
}
Run Code Online (Sandbox Code Playgroud)

如您所见,IsValueTypeImpl()(由IsValueType属性调用)取决于继承IsClass 依赖于 IsValueType(!).

接下来,ValueType的这种描述表明不可能直接从ValueType继承.

所以,答案是,你不能创建,这将是类型IsClass,并IsValueType在同一时间