2012-01-22 2 views
4

이것은 n00b 질문과 같을 수도 있지만, 2 개의 클래스를 가져 와서 함께 병합하고 싶습니다.C#이 두 개 이상의 클래스를 함께 사용 하시겠습니까?

지금처럼 :

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의 더하기 연산자를 오버로드 할 것, 뭔가 같은 :

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

비록 2 개 Ball의에서 소요하고 그들이 아마 더 읽을 추가,하지만 Ball 생성자를 만드는 당신은 실제로 원하는 경우 new Ball(ball1 + ball2)을 작성하면 연산자 오버로딩이 작동합니다. 생성자를 사용하면 코드가 다음과 같이 표시됩니다. new Ball(ball1, ball2)

+0

그게 내가 찾고 있었던거야! 방금 구문이 잘못되었다는 것을 알았습니다. 감사! – Vinny

2

, 단지 두 번째 오버로드

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

은 두 볼을 병합하려면 : 생성자 오버로드를 호출

Ball bigBall = new Ball(oneBall, anotherBall); 

주의가 아닌 + 연산자. 이 의미를 함께 Ball의 두 인스턴스를 추가하는 것이 합리적 경우

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

만이 작업을 수행 : 그것은 의미가있는 경우

+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

당신은 당신의 유형에 대한 추가 연산자를 정의 할 수 있습니다.

+0

당신은 물건을 섞고 있습니다. 'implicit'과'explicit'은 타입 변환을위한 것입니다. 'operator xy'는 연산자 오버로딩을위한 것입니다. –

+0

Woops, fixed ... – driis

관련 문제