在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之间的加法一样神奇。
我推荐这篇MSDN文章:http://msdn.microsoft.com/en-us/library/8edha89s(v=VS.100).aspx
显示了可以重载的操作符和任何捕获。<=
和>=
可以过载,但它们必须成对过载,==
和!=
也是如此。
如果+、等被重载,则可以使用复杂匹配操作符+=、等。
>=
和<=
是分开的。也就是说,重载>
和==
不会隐式地为您提供>=
操作符。