C#一起参加2个或更多的课程?
这听起来像是一个n00b问题,但我想选两个类并将它们合并在一起 像这样:C#一起参加2个或更多的课程?,c#,C#,这听起来像是一个n00b问题,但我想选两个类并将它们合并在一起 像这样: Ball oneBall = new Ball("red", 20); Ball anotherBall = new Ball("blue",40); Ball BigBall = new Ball(oneBall + anotherBall); BigBall.size() //should say 60 right? 我知道你会有这样的想法 class Ball{ public Ball(string
Ball oneBall = new Ball("red", 20);
Ball anotherBall = new Ball("blue",40);
Ball BigBall = new Ball(oneBall + anotherBall);
BigBall.size() //should say 60 right?
我知道你会有这样的想法
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
{}
}
所以我的问题是过载(对吗?)应该是什么样子
谢谢,这差不多是正确的,只需将两个球作为两个参数传递给第二个重载
Ball BigBall = new Ball(oneBall , anotherBall);
并调整过载,使其将两个球的尺寸相加:
public Ball(Ball firstBall, Ball secondBall){} //I know the arguments have to be added
{
this.size = firstBall.size + secondBall.size;
}
是的,您可以定义构造函数重载
public class Ball
{
public string Name { get; private set; }
public int Size { get; private set; }
public Ball(string name, int size)
{
this.Name = name;
this.Size = size;
}
// This is called constructor chaining
public Ball(Ball first, Ball second)
: this(first.Name + "," + second.Name, first.Size + second.Size)
{ }
}
要合并两个球,请执行以下操作:
Ball bigBall = new Ball(oneBall, anotherBall);
请注意,您正在调用构造函数重载,而不是
+
运算符。如果有意义,可以为您的类型定义加法运算符:
public class Ball
{
public int Size { get; private set; }
public string Name { get; private set; }
public Ball(string name , int size)
{
Name = name;
Size = size;
}
public Ball(Ball firstBall, Ball secondBall)
{
Name = firstBall.Name + ", " + secondBall.Name;
Size = firstBall.Size + secondBall.Size;
}
}
public static operator+(Ball rhs, Ball lhs)
{
return new Ball(lhs.Size + rhs.Size);
}
仅当将
Ball
的两个实例添加在一起在语义上有意义时才执行此操作 您可能希望为Ball
重载加法运算符,例如:
public static Ball operator +(Ball left, Ball right)
{
return new Ball(left.Name + right.Name, left.Size + right.Size);
}
虽然制作一个
Ball
构造函数来接受2个Ball
s并添加它们可能更具可读性,但是如果您确实想编写newball(ball1+ball2)
,那么操作符重载就行了。如果您使用构造函数执行此操作,那么您的代码将如下所示:newball(ball1,ball2)
您是在寻找运算符重载吗<代码>类HairyBall扩展Ball实现BigBallscnr@ThiefMaster我喜欢你的逻辑哈哈,事实上,我更喜欢这种方式而不是我的答案+1.你把东西混在一起了<代码>隐式和显式
用于类型转换<代码>运算符xy用于运算符重载。这就是我要找的!我只知道我的语法不适合它。谢谢