【问题标题】:C# join 2 or more classes together?C# 将 2 个或更多类连接在一起?
【发布时间】:2012-02-16 08:04:57
【问题描述】:

所以这听起来像是一个 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? 

我知道你会有这样的东西

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
{}


} 

所以我的问题是重载(对吗?)假设看起来像什么?

谢谢,

【问题讨论】:

标签: c#


【解决方案1】:

是的,您可以定义构造函数重载。

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);

请注意,您调用的是构造函数重载,而不是 + 运算符。

【讨论】:

  • 实际上,我更喜欢这种方式而不是我的答案。 +1。
【解决方案2】:

您可能希望为Ball 重载加法运算符,例如:

public static Ball operator +(Ball left, Ball right)
{
    return new Ball(left.Name + right.Name, left.Size + right.Size);
}

虽然创建一个 Ball 构造函数来接收 2 个 Balls 并添加它们可能更具可读性,但如果您真的想编写 new Ball(ball1 + ball2) ,那么运算符重载将起作用。如果您使用构造函数进行此操作,那么您的代码将如下所示:new Ball(ball1, ball2)

【讨论】:

  • 这就是我要找的东西!我只知道我的语法不适合它。谢谢!
【解决方案3】:
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;
    }
} 

【讨论】:

    【解决方案4】:

    差不多是这样,只需将两个球作为两个参数传递给第二个重载

    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;
    }
    

    【讨论】:

      【解决方案5】:

      如果有意义,您可以为您的类型定义加法运算符:

      public static operator+(Ball rhs, Ball lhs) 
      {
          return new Ball(lhs.Size + rhs.Size);
      }
      

      仅当将Ball 的两个实例相加在语义上有意义时才这样做。

      【讨论】:

      • 你在混合东西。 implicitexplicit 用于类型转换。 operator xy 用于运算符重载。
      猜你喜欢
      • 1970-01-01
      • 2011-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多