在C#类中添加负运算符(?)

11

我可能用词不当,这也许是我无法自行找到答案的原因。我的类中有+和-运算符,但我想添加一个负号运算符... 我希望能够做到这一点:

myMethod(myClass, -myClass);

如果您需要代码示例来帮助我,请让我知道,但是我认为这应该很简单... 或者说它无法实现。


2
这个负号运算符应该做什么? - David L
8
如果你正在重载一元减运算符,最好也重载一元加运算符。我知道它是世界上最无用的运算符,但能够说“-foo”而不能说“+foo”也很奇怪。 - Eric Lippert
2
仅仅因为你能做到并不意味着你应该这样做。你为什么想要那样做呢? - Jens Kloster
我的类包含3个变量,都是整数。 当我想创建一个负值时,我目前这样做:new myClass(-thisInst.int1, -thisInst.int2, -thisInst.int3); -- 在这里使用负运算符是有意义的,因为它只是翻转符号。 - Anthony Nichols
1
或许值得注意的是,托管DirectX将Vector3定义为struct而不是class。您可能希望在实现时考虑这一点。 - James
显示剩余2条评论
2个回答

31

当然,一元运算符-可以重载

public static MyClass operator -(MyClass myClass)
{
    ...
}

使用这些特性时要小心,因为消费者可能不了解这些运算符的语义,与方法(可以使用良好命名)不同,自定义类型上的运算符通常不是立即明显的。希望你的类表示某种类型的向量或类似物?


1
太棒了...但现在我感觉很蠢。我应该能想到的;甚至没有考虑只用一个参数创建运算符。谢谢! - Anthony Nichols
谢谢你还提供了额外的提示。这是一个包含一组3个整数的类;因此负数将只是反转这些值的符号。 - Anthony Nichols

5
public static YourClass operator -(YourClass value)
{
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接