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

本文关键字:查询 自己 记为 IsClass IsValueType 反射 有可能 是否 一个 | 更新日期: 2023-09-27 18:10:22

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

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

我知道,

大多数基本类型将返回(包括枚举&结构体):
IsValueType = true, IsClass = false。

字符串或任何类-抽象也是。返回:
IsValueType = false, IsClass = true。

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

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

是否有可能设计一个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;
  }
}

可以看到,IsValueTypeImpl()(由IsValueType属性调用)依赖于继承IsClass 依赖于 IsValueType(!)。

接下来,ValueType的描述说明不可能直接从ValueType继承。

所以,答案是,你不能同时创建类型为IsClassIsValueType