Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#一起参加2个或更多的课程?_C# - Fatal编程技术网

C#一起参加2个或更多的课程?

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

这听起来像是一个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 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用于运算符重载。这就是我要找的!我只知道我的语法不适合它。谢谢