2009-04-03 4 views
2

개체에 새 속성을 추가하고이 개체를 처리하는 다른 클래스에서 메서드를 확장하는 등의 추가 기능이 필요합니다. 나는 제품의 소스 코드를 다루고있다. (C# 2.0에서) 우리는 정말로 수정하고 싶지 않다. 그냥 확장하고 싶다.별도의 어셈블리로 C# 코드 확장

코드를 분명히 할 수 있도록 별도의 어셈블리를 만드는 것이 이상적입니다. 그것은 부분 클래스처럼 보이고 대의원이 갈 수있는 방법 일지 모르지만 이것이 가능한지 확실하지 않습니다. 비슷한 일을 한 사람 있습니까? 또는 좋은 기사를 아십니까?

답변

3

Decorator 패턴을 확인하십시오. 이것은 정확히 당신이 찾고있는 것입니다. 기존 클래스를 상속 받아 추가 논리로 확장 할 수 있습니다. 기본 기능을 숨기려면 패턴이 Proxy입니다.

0

원본 클래스도 "부분"클래스가되도록 수정해야하며 두 번째 어셈블리의 네임 스페이스가 첫 번째 어셈블리의 네임 스페이스와 일치해야하며 두 어셈블리가 모두 프로젝트의 참조 인 지 확인해야합니다 어셈블리를 사용합니다. 거기에서 당신의 의지까지 자유롭게 확장 할 수 있습니다.

+0

확실히, 당신은 그것을 시도하고, 그것이 작동 할 때, 20-30 년과 같이 나에게 돌아온다. – leppie

+0

@leppie : 스마트 카를 연주하는 대신 자신의 대답을 제시하는 것이 어떻습니까? @topic : 내가 틀린 것 같아요, 다른 어셈블리의 부분 클래스는 하나의 클래스로 취급되지 않습니다. 잘못된 대답을 드려서 죄송합니다. – gsnerf

+0

그래, 부분은 컴파일러의 상상력의 한 부분입니다. 컴파일 시간이 지나면 사라지기 때문에 어셈블리의 부분 클래스를 가질 수 없습니다. – Will

0

클래스에서 상속 받거나 봉인 할 수 있습니까? 상속은 기존 클래스를 확장하는 OO 방법입니다. ...

+0

네, 상속받을 수 있지만 그 코드에 대한 모든 코드 참조는 변경하지 말아야합니다 (기존 코드를 수정하지 않기 위해) ... 피할 수없는 것처럼 보입니다 – degero

3

hfcs101과 비슷합니다.

기존 OO 디자인 패턴이있는 경우 클래스를 확장 할 수 있는지 확인하십시오. 당신이 밀접하게 문제를 일치하는 패턴을 찾을 수 있는지 확인

:

는에서 살펴 보자. Decorator는 최고의 후보자처럼 보입니다.

+1

다른 패턴 덕분에 들어 본 적이 없었습니다. 전에 이것들은 데코레이터가 너와 @Denis_Vuyka가 언급 한 곳이다. – degero