在c#中,一个结构体中到底需要多少次重写?

本文关键字:多少次 重写 结构体 一个 | 更新日期: 2023-09-27 18:01:28

我正在为模拟器项目中的"word"制作包装器。它的意思是把我所有的演员转换都在一个地方。我正要开始实现所有的数学函数的覆盖(+,-,/,8,shift等),当我想到,不应该所有的隐式的照顾?我是否需要越过>= and <=当我得到>

我想我会问这个问题,因为虽然有很多关于如何创建它们的问题,但关于多少才足够的问题并不多。下面是代码:

public struct word_t
{
    ulong val;
    word_t(ulong val) { this.val = val; }
    public static implicit operator word_t(int a) { return new word_t((ulong)a); }
    public static implicit operator word_t(long a) { return new word_t((ulong)a); }
    public static implicit operator word_t(uint a) { return new word_t((ulong)a); }
    public static implicit operator word_t(ulong a) { return new word_t((ulong)a); }
    public static implicit operator int(word_t a) { return (int)a.val; }
    public static implicit operator long(word_t a) { return (long)a.val; }
    public static implicit operator uint(word_t a) { return (uint)a.val; }
    public static implicit operator ulong(word_t a) { return (ulong)a.val; }
    public static bool operator ==(word_t a, word_t b) { return a.val == b.val; }
    public static bool operator !=(word_t a, word_t b) { return a.val != b.val; }
    public static bool operator >(word_t a, word_t b) { return a.val > b.val; }
    public static bool operator <(word_t a, word_t b) { return a.val < b.val; }
    public override bool Equals(object obj) {
            return obj.Equals(val);
    }
    public override int GetHashCode() {
        return val.GetHashCode();
    }
    public override string toString() {
        return val.ToString();
    }
}

我的直觉告诉我"相信编译器",但我的头脑总是担心它的效率。

PS我刚刚意识到我应该覆盖移位,因为负数的位移位问题,但现在只是想象移位就像int和int之间的加法一样神奇。

在c#中,一个结构体中到底需要多少次重写?

我推荐这篇MSDN文章:http://msdn.microsoft.com/en-us/library/8edha89s(v=VS.100).aspx

显示了可以重载的操作符和任何捕获。<=>=可以过载,但它们必须成对过载,==!=也是如此。

如果+、等被重载,则可以使用复杂匹配操作符+=、等。

>=<=是分开的。也就是说,重载>==不会隐式地为您提供>=操作符。