2012-01-22 16 views
4

これはn00bの質問のように聞こえるかもしれませんが、私は2つのクラスを取って一緒にマージしたいと思います。そのようC#は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 
{} 


} 

のようなものを持っているでしょう知っていますか?右についてです

おかげで、

+1

演算子のオーバーロードを探していますか? http://stackoverflow.com/questions/6587107/c-sharp-operator-overload-for – Douglas

+3

'class HairyBall extends Ball implements BigBall' scnr – ThiefMaster

+0

@ThiefMaster私はあなたのロジックが好きです。 – Vinny

答えて

5

あなたは、Ballのためのようなもの加算演算子をオーバーロードしたいと思う:2 Ball秒で受け取り、それらを追加しBallコンストラクタを作ることは、おそらく、より読みやすいですが、しかし、あなたが実際にしたい場合は

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

new Ball(ball1 + ball2)を書くと、演算子のオーバーロードが機能します。コンストラクタを使用した場合、コードは次のようになります。new Ball(ball1, ball2)

+0

これは私が探していたものです!私は、私の構文がそれのためにオフであったことを知っていた。ありがとう! – Vinny

2

は、ちょうど2番目のオーバーロードには、2つのパラメータ

Ball BigBall = new Ball(oneBall , anotherBall); 

として2個のボールを渡すと、それは2個のボールが一緒にサイズ追加して過負荷を調整します

public Ball(Ball firstBall, Ball secondBall){} //I know the arguments have to be added 
{ 
    this.size = firstBall.size + secondBall.size; 
} 
6

はい、コンストラクタのオーバーロードを定義できます。

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

は、2個のボールをマージするには:あなたは、コンストラクタのオーバーロードを呼び出している

Ball bigBall = new Ball(oneBall, anotherBall); 

注意、ない+演算子を。

+1

実際、私は私の答えよりもこの方法が好きです。 +1。 –

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

それは理にかなっている場合は、あなたのタイプのための加算演算子を定義することができます:それは意味的に一緒にBallの2つのインスタンスを追加することは理にかなっている場合

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

のみこれを行います。

+0

あなたはものを混ぜています。 'implicit'と' explicit'は型変換のためのものです。 '演算子xy'は演算子の多重定義です。 –

+0

Woops、fixed ... – driis

関連する問題