我试图了解更多关于如何在 C# 中实现和表示值类型的信息,当我看到 Single 结构/值类型定义如下时感到困惑:
public struct Single : IComparable, IComparable<Single>, IConvertible, IEquatable<Single>, IFormattable
{
public const Single Epsilon = 1.401298E-45F;
public const Single MaxValue = 3.40282347E+38F;
public const Single MinValue = -3.40282347E+38F;
public const Single NaN = 0F / 0F;
public const Single NegativeInfinity = -1F / 0F;
public const Single PositiveInfinity = 1F / 0F;
// etc ...
}
Single 结构本身如何包含 Singles?或者换句话说,类型的定义如何包含该类型的实例?如果我尝试使用自己的结构执行此操作,编译器将返回错误。是不是实际的底层值是 C++ 原语,而“值类型”只是围绕它的方法集合? 我认为最终我对“原始”和“值类型”之间的区别感到困惑。如果它们是基元,为什么将它们定义为结构体?
最佳答案
如果您尝试这样做,编译器会提示您的结构无法成为 const
(“类型‘MyStruct’无法声明为 const”)。
我问了一个similar question about decimal
曾几何时。乔恩·斯基特 (Jon Skeet) 自己给出的答案是,mscorlib
的源代码中有些东西如果没有“一些有趣的 hack”,将无法按编写的那样进行编译。
我猜您遇到过其中一种。 Single
是float
的同义词,它本身就是一个原始类型。源可能不是实际编译/CLR 类型的干净抽象。
关于C# 值类型如何包含自己类型的字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58887409/