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

还是它们实际上是互斥的标记?

我知道,

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

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

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

最佳答案



让我们看一下这些实现:

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/

10-10 21:43