2014-04-26 2 views
1

"역방향"으로 확장되는 클래스를 Rectangle으로 확장하려고합니다. 나는 수업 시간에이 방법을 넣을 수 있도록하려면 :반대로 클래스 확장하기

public Point RightPoint() 
    { 
     return new Point(this.X + this.Width, this.Y + this.Height/2); 
    } 

다음 rectangle.RightPoint() 전화; 반환 값을 얻습니다. (X, Y, WidthHeightRectangle의 필드입니다.

이것이 가능합니까? 아니면이 정적 메서드를 만들고 나서 Rectangle을 전달해야합니까?

답변

3

나는 당신이 extension method

public static Point RightPoint(this Rectangle rectangle) 
{ 
    return new Point(rectangle.X + rectangle.Width, rectangle.Y + rectangle.Height/2); 
} 

위의 코드는 static 클래스 내부에 가야 필요가 있다고 생각합니다.

그런 다음 당신은 Rectangle 개체에서이 작업을 수행 할 수 있습니다

Rectangle rect = new Rectangle(); 
Point pointObj = rect.RightPoint(); 
+0

내가 감사를 찾고 정확히 무엇을 :

public static Point RightPoint(this Rectangle rect) { return new Point(rect.X + rect.Width, rect.Y + rect.Height/2); } 

이 당신이 원하는 통화를 할 수 있습니다! – Evorlor

+0

@Evorlor, 도움이 된 것을 기쁘게 생각합니다. –

+0

언제든지 재산에서이 작업을 수행 할 수 있습니까? (그래서 메서드 호출 후 괄호가 필요 없다) – Evorlor

3

당신은 확장 메서드를 사용할 수 있습니다 : 이것은 당신이 그것을 사용하실 수 있습니다

public static class ExtensionMethods 
{ 
    public static Point RightPoint(this Rectangle rectangle) 
    { 
     return new Point(rectangle.X + rectangle.Width, rectangle.Y + rectangle.Height/2); 
    } 
} 

를이 사각형의 일부처럼 구조체 :

Point rightPoint = rect.RightPoint(); 
3

기존 클래스에 메소드를 추가하려면 opti 다음과 같습니다 :

  1. Rectangle 클래스의 확장 방법을 작성하십시오.
  2. Rectangle 클래스에서 상속 받아 해당 메서드를 자식 클래스에 추가합니다.
  3. 멤버를 Rectangle 클래스에 직접 추가합니다.

옵션 2는 새 유형을 생성해야하며 옵션 3은 클래스를 변경해야합니다. 그래서 같은 확장 방법을 추천 할 것입니다 :

var rectangle = new Rectangle(); 
var point = rectangle.RightPoint();