如何创建可以类似于本机类型实现的值类型
How can I create a value type that can be implemented similar to a Native type
我想创建一个类型'Q'。
我希望能够对类型 Q 执行的操作是分配一个类似于我们分配给本机类型的方式的值。
所以如果定义是:
public struct Q
{
}
我希望实现为:
Q val = 1.0f
当我们查看 System.Single 的结构时,我们可以看到它没有声明任何值。但是我无法理解他们正在做什么以使他们能够为结构本身分配一个值。我怎样才能做到这一点,以便我可以像他们一样直接为结构分配一个值?
“当我们查看 System.Single 的结构时,我们可以看到它没有声明任何值。”那是不正确的。这是声明:
public readonly struct Single : IComparable, IConvertible, ISpanFormattable, IComparable<float>, IEquatable<float>
{
private readonly float m_value; // Do not rename (binary serialization)
// ...
}
字段m_value
是Single
实例创建时取值的成员字段。因为它是唯一的字段,所以它与值类型的整个对象实例相同。
built-in-types 的不同之处在于它们允许从值自动隐式赋值。如果你想为自己的类型使用它,则需要显式声明这样的赋值运算符。这些可以是 implicit 或 explicit。您可以找到有关如何执行此操作的示例 here。这是针对您的案例的修改示例:
public readonly struct MyQ
{
private readonly int _value;
public MyQ(int v)
{
_value = v;
}
public static implicit operator MyQ(int b) => new MyQ(b);
public override string ToString() => $"{_value}";
}
这可以用作:
MyQ a = default;
a = 2;
我想创建一个类型'Q'。
我希望能够对类型 Q 执行的操作是分配一个类似于我们分配给本机类型的方式的值。
所以如果定义是:
public struct Q
{
}
我希望实现为:
Q val = 1.0f
当我们查看 System.Single 的结构时,我们可以看到它没有声明任何值。但是我无法理解他们正在做什么以使他们能够为结构本身分配一个值。我怎样才能做到这一点,以便我可以像他们一样直接为结构分配一个值?
“当我们查看 System.Single 的结构时,我们可以看到它没有声明任何值。”那是不正确的。这是声明:
public readonly struct Single : IComparable, IConvertible, ISpanFormattable, IComparable<float>, IEquatable<float>
{
private readonly float m_value; // Do not rename (binary serialization)
// ...
}
字段m_value
是Single
实例创建时取值的成员字段。因为它是唯一的字段,所以它与值类型的整个对象实例相同。
built-in-types 的不同之处在于它们允许从值自动隐式赋值。如果你想为自己的类型使用它,则需要显式声明这样的赋值运算符。这些可以是 implicit 或 explicit。您可以找到有关如何执行此操作的示例 here。这是针对您的案例的修改示例:
public readonly struct MyQ
{
private readonly int _value;
public MyQ(int v)
{
_value = v;
}
public static implicit operator MyQ(int b) => new MyQ(b);
public override string ToString() => $"{_value}";
}
这可以用作:
MyQ a = default;
a = 2;