是否有可能设计一个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吗?
让我们看一下这些实现:
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继承。
所以,答案是不,你不能同时创建类型为IsClass
和IsValueType