- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
当我尝试定义一个继承自 System.ValueType
或 System.Enum
类的类时,出现错误:
Cannot derive from special class System.ValueType
我理解那个错误,但我不明白是什么让 ValueType
类特殊?我的意思是没有关键字(如sealed
)或属性来指定此类不能被继承。ValueType
有两个属性,Serializable
和ComVisible
但它们都与该案例无关。documentation说:
Although ValueType is the implicit base class for value types, you cannot create a class that inherits from ValueType directly. Instead, individual compilers provide a language keyword or construct (such as struct in C# and Structure…End Structure in Visual Basic) to support the creation of value types.
但它没有回答我的问题。所以我的问题是在这种情况下如何通知编译器?当我尝试创建一个继承自某个类的类时,编译器是否会直接检查该类是 ValueType
还是 Enum
?
编辑:所有结构隐式
继承自ValueType
,但Enum
类显式继承自 ValueType
,那么它是如何工作的呢?编译器是怎么弄清楚这种情况的,所有这些都是编译器硬编码的?
最佳答案
I understand that error but what I couldn't understand is what makes ValueType class special?
该类被记录为特殊类。这就是它的特别之处。
how the compiler is informed in this case?
编译器编写者在编写编译器之前阅读文档。
Does the compiler directly check whether the class is ValueType or Enum when I try to create a class that inherit from a class?
是的。
Also all structs implicitly inherit from ValueType, but Enum class Explicitly inherit from ValueType, so how is that working?
它运行良好。
Are all of these special cases hard coded into the compiler?
是的。
Isn't it more appropriate to create an attribute to specify that this class is special and cannot be inherited instead of hard coding?
不,不是。这意味着第三方也可以创建一个特殊类型,在继承时需要编译器进行特殊处理。第三方将如何修改编译器以实现这些规则?
关于c# - 是什么让 ValueType 类特别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21213708/
比方说,我在 c# 中有以下代码 int x = 0; x.ToString(); 这是否在内部对 x 进行装箱?有没有办法从 visual studio 中看到这种情况? 最佳答案 在此特定情况下,
C# 不允许结构派生自类,但所有 ValueType 都派生自 Object。这个区别在哪里? CLR 如何处理这个问题? 最佳答案 C# doesn't allow structs to deriv
我正在尝试向泛型方法添加约束,以便它检查 ValueTypes、Strings 或 Nullable 值类型。 问题在于: 值类型是 struts 字符串是不可变的引用类型 可为空的是值类型,但不会在
我正在做一项不允许使用任何 STL 容器的家庭作业。我对 LinkedList 的实现是用指针链接在一起的节点集合。我有另一个名为 ContinuousList 的类,它有一个数据成员 LinkedL
引自MSDN Link for ValueType Class In cases where it is necessary for a value type to behave like an ob
以下打印等于: struct A { int x; public A(int _x) { x = _x; } public int Y { get
我构建了一个框架,该框架允许根据哪个列是主排序列对表中的报告数据进行级联排序。它在大多数情况下都有效,但在一个特定但重要的情况下除外:当字段的属性是值类型时。我收到以下错误消息: System.Arg
我有一个方法,它返回给定的类型: T foo(Class valueType) {...}; String s = foo(Java.lang.String.class); 我正在尝试发送泛型类型作为
是否可以在不编写特定于类型的克隆代码的情况下克隆一个已知为盒装 ValueType 的对象? 一些引用代码 List values = new List {3, DateTime.Now, 23.4M
几天前我需要切换一个bool,结果我这样做了: IsVisible = !IsVisible; 我发现这是归档该功能的最简单方法。但在像上面的例子那样做之前,我尝试了一些不同的方法。 主要是关于使用扩
我的理解是 .Net 中的每个新线程分配 1MB of stack space .我的进一步理解是值类型存储在堆栈而不是堆中...... 所以我的问题是这样的;这种行为是否意味着任何 ValueTyp
如果您查看 .NET Nullable 的文档,您会看到: struct Nullable 请注意,它是一个结构,而不是一个类。 好像是struct Nullable 不是 ValueType,
执行这段代码后我感到很困惑,其中字符串的行为似乎就像它们是值类型一样。我想知道赋值运算符是否正在对字符串的相等运算符等值进行操作。 这是我用来测试这种行为的一段代码。 using System; na
问题应该是不言自明的。我有一个 datagridview,其中有一列,其单元格在用户输入时应仅接受正整数。 那么我怎样才能设置这样的东西: dgv.Columns[i].Val
我在许多文章中读到所有值都是从System.ValueType派生的类型。但经过一番调查后,我发现所有值类型要么是 struct 要么是 enum。 众所周知,struct 不支持继承。那么值类型是如
如果我将一个简单的值类型(例如 int)分配给 ValueType 类型的属性,那么该值是否被装箱? 例如,如果我这样做: int i = 4; ValueType test = i; 值会被装箱吗?
System.ValueType 是 class , 然而所有值类型都是结构。 如果我像这样创建一个 ValueType 的实例: System.ValueType foo = 5; ...是保存在堆
考虑这个类: public class Foo { public Int32 MyField; } 我猜“MyField”成员不在线程堆栈上,因为它可以被多个线程访问,它肯定在托管堆中,但这是
结构体只是一个继承自 System.ValueType 的类,对吗? 关键字“struct”是否只是编写一个类的语法糖:名称后有 System.ValueType? 如果它只是一个类,那么不是所有的类
当我尝试定义一个继承自 System.ValueType 或 System.Enum 类的类时,出现错误: Cannot derive from special class System.ValueT
我是一名优秀的程序员,十分优秀!