Is it possible to design a C# class that when querying it through reflections will mark itself as positive IsValueType and positive IsClass?

.net, c#, reflection

Solution

Is it possible to design a C# class that when querying it through reflections will mark itself as positive IsValueType and positive IsClass?

Let's take a look on these implementations:

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;
  }
}

As you can see, `IsValueTypeImpl()` (which is called by `IsValueType` property) depends on inheritance AND `IsClass` depends on `IsValueType` (!).

Next, this description of ValueType states that it's not possible to inherit from ValueType directly.

So, the answer is no, you cannot create type which will be `IsClass` and `IsValueType` at the same time

Problem

Is it possible to design a C# class that when querying it through reflections will mark itself as positive IsValueType and positive IsClass? Or are they actually mutually exclusive markings? I know that, Most primitive types will return (including enums & structs): IsValueType=true, IsClass=false. String or any class - abstracts too.. return: IsValueType=false, IsClass=true. Interfaces returns: IsValueType=false, IsClass=false

Original source