You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建行为与int完全一致但非int的自定义struct?

实现方法

核心思路

创建一个包装int字段的struct,通过运算符重载和隐式/显式转换模拟int的全部行为。这种方式既保证当前和int的行为完全一致,又能在未来轻松添加或移除特性,完美避开struct不支持继承的限制。

最简代码示例

public struct MyInt
{
    // 内部存储int值
    private readonly int _value;

    // 构造函数
    public MyInt(int value) => _value = value;

    // 隐式转换:int转MyInt,实现直接赋值
    public static implicit operator MyInt(int value) => new MyInt(value);

    // 隐式转换:MyInt转int,实现直接当作int使用
    public static implicit operator int(MyInt myInt) => myInt._value;

    // 重载基础算术运算符
    public static MyInt operator +(MyInt a, MyInt b) => new MyInt(a._value + b._value);
    public static MyInt operator -(MyInt a, MyInt b) => new MyInt(a._value - b._value);
    public static MyInt operator *(MyInt a, MyInt b) => new MyInt(a._value * b._value);
    public static MyInt operator /(MyInt a, MyInt b) => new MyInt(a._value / b._value);
    public static MyInt operator %(MyInt a, MyInt b) => new MyInt(a._value % b._value);

    // 重载比较运算符
    public static bool operator ==(MyInt a, MyInt b) => a._value == b._value;
    public static bool operator !=(MyInt a, MyInt b) => a._value != b._value;
    public static bool operator >(MyInt a, MyInt b) => a._value > b._value;
    public static bool operator <(MyInt a, MyInt b) => a._value < b._value;
    public static bool operator >=(MyInt a, MyInt b) => a._value >= b._value;
    public static bool operator <=(MyInt a, MyInt b) => a._value <= b._value;

    // 重载自增自减运算符
    public static MyInt operator ++(MyInt a) => new MyInt(a._value + 1);
    public static MyInt operator --(MyInt a) => new MyInt(a._value - 1);

    // 重载位运算(按需添加)
    public static MyInt operator &(MyInt a, MyInt b) => new MyInt(a._value & b._value);
    public static MyInt operator |(MyInt a, MyInt b) => new MyInt(a._value | b._value);

    // 重写值类型必备方法,保证行为和int一致
    public override bool Equals(object obj) => obj is MyInt other && _value == other._value;
    public override int GetHashCode() => _value.GetHashCode();
    public override string ToString() => _value.ToString();
}

优势与灵活性

  • 无缝交互:隐式转换让你可以像用int一样用这个struct,比如MyInt num = 10; int regularInt = num;,完全不需要额外处理。
  • 易扩展/修改:未来要移除某个特性(比如禁止减法),直接删掉对应的运算符重载即可;要新增特性(比如添加自定义验证),直接在构造函数或运算符里加逻辑。
  • 类型安全:这个struct是独立类型,不会被误当成int,避免后续修改时的类型混淆问题。

注意事项

  • 如果后续要限制类型转换,可以把implicit改成explicit,强制用户手动转换,增强类型安全性。
  • 若需要支持和其他数值类型(如long、float)的运算,只需新增对应的运算符重载即可。

内容的提问来源于stack exchange,提问作者Dailysmiler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 08:46:11