正是(引擎盖下)做了什么+=和-=运营商呢?
或者它们是隐含的,因为它们是按类型定义的?
我已广泛使用它们,这是语法的一个非常简单的特性,但我从未想过它的工作原理的深度.
关于这个问题带来了什么
我可以像这样连接一个字符串值:
var myString = "hello ";
myString += "world";
Run Code Online (Sandbox Code Playgroud)
一切都很好.但为什么这不适用于收藏?
var myCol = new List<string>();
myCol += "hi";
Run Code Online (Sandbox Code Playgroud)
你可能会说'你正试图附加一个不同的类型,你不能将一个字符串附加到一个非字符串的类型'.但以下情况也不起作用:
var myCol = new List<string>();
myCol += new List<string>() { "hi" };
Run Code Online (Sandbox Code Playgroud)
好吧,也许它不适用于集合,但以下不是一种(某种)事件处理程序集合?
myButton.Click += myButton_Click;
Run Code Online (Sandbox Code Playgroud)
我显然缺乏对这些运算符如何工作的深入理解.
请注意:myCol在实际项目中,我不是试图以这种方式构建集合.我只是对这个运营商的运作感到好奇,这是假设的.
所以这可能听起来像一个n00b问题,但我想把2个类合并在一起.
像这样:
Ball oneBall = new Ball("red", 20);
Ball anotherBall = new Ball("blue",40);
Ball BigBall = new Ball(oneBall + anotherBall);
BigBall.size() //should say 60 right?
Run Code Online (Sandbox Code Playgroud)
我知道你会有这样的事情
class Ball{
public Ball(string Name , int size){}
// But to merge to of them?
public Ball(Ball firstBall, Ball secondBall){} //I know the arguments have to be added
{}
}
Run Code Online (Sandbox Code Playgroud)
所以我的问题是什么是超载(对吧?)假设看起来像?
谢谢,
我来自C ++,使用C#作为新手,只是尝试了一下:
class Class1
{
int mI = 0;
string mS = "ab";
public static Class1 operator + (Class1 obj1, Class1 obj2)
{
return new Class1()
{
mI = obj1.mI + obj2.mI,
mS = obj1.mS + obj2.mS
};
}
public static void operator += (Class1 obj1)
{
mI += obj1.mI;
mS += obj1.mS;
}
}
Run Code Online (Sandbox Code Playgroud)
我发现该operator+=函数无法编译,并说:
错误CS1019:应重载一元运算符。
那么C#根本不执行这种运算符重载吗?
可能重复:
在C#中重载复合赋值运算符的简单方法?
我正在玩事件,思想事件很奇怪.为什么我不能在泛型类中实现它们.所以我试着发现我不能超载+ =.从这里找到的语言规范
The overloadable unary operators are:
+ - ! ~ ++ -- true false
The overloadable binary operators are:
+ - * / % & | ^ << >> == != > < >= <=
Run Code Online (Sandbox Code Playgroud)
+ =未列出.现在,在你说没有理由重载之前+ =我想提出事实C#有使用+ =运算符的事件以及我试图实现一个有趣的事件并希望使用+ =运算符的事实.现在,我有一种感觉,有人会说这就是为什么事件存在,因为这是唯一的原因.但是我想提出你可以使用+ =与TimeSpan结构.去试试吧,var ts= new TimeSpan(); ts += ts;将编译并运行.
我查看了TimeSpan的定义,我不知道它是如何允许的.我看到了一个public static TimeSpan operator +(TimeSpan t);看起来很可疑的东西,但后来我意识到它var name = +ts;就像你怎么能做到var name = -ts;否定一样.
所以我的问题是,我如何使用+ =作为我的结构或类.它似乎得到支持我似乎无法找到它的文档.