c# - 是否可以设计一个 C# 类,在通过反射查询时将其自身标记为正 IsValueType 和正 IsClass?

标签 c# .net reflection

是否可以设计一个 C# 类,在通过反射查询时将其自身标记为正 IsValueType 和正 IsClass?

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

我知道,

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

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

接口(interface)返回:
IsValueType=false, IsClass=false

最佳答案

Is it possible to design a C# class that when querying it through reflections will mark itself as positive IsValueType and positive 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 (!).

接下来,this description of ValueType指出不可能直接从 ValueType 继承

所以,答案是,您不能同时创建IsClassIsValueType 的类型

关于c# - 是否可以设计一个 C# 类,在通过反射查询时将其自身标记为正 IsValueType 和正 IsClass?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16164639/

相关文章:

c# - 当ThreadPool构造新线程而不是重用它们时?

java - 如何使用父类(super class)构造函数创建子类的实例?

reflection - 哪些 Scala 功能是在内部使用反射实现的?

c# - 使用任务计划程序找不到文件

C# 控制平衡括号递归

c# - 修复可能出现的空警告

c# - 如何使用多个条件过滤 Directory.EnumerateFiles?

c# - 如何从控制台读取用户输入?

c# - 在我的多线程应用程序失败后,未完成的线程是否会挂起?

C# if else 异常