나는 C#에서 이러한 클래스가 (.NET 프레임 워크 3.5) 아래에서 설명하는 방법 :"포장"C#에서 구현
public Base GetStateDependentImplementation()
{
if (State == Running) // may be some other rule
return _b;
else
return base; // compile error
}
:
public class Base
{
public int State {get; set;}
public virtual int Method1(){}
public virtual string Method2(){}
...
public virtual void Method10(){}
}
public class B: Base
{
// some implementation
}
public class Proxy: Base
{
private B _b;
public Proxy(B b) { _b = b; }
public override int Method1()
{
if (State == Running)
return _b.Method1();
else
return base.Method1();
}
public override string Method2()
{
if (State == Running)
return _b.Method2();
else
return base.Method2();
}
public override void Method10()
{
if (State == Running)
_b.Method10();
else
base.Method10();
}
}
내가이 뭔가를 얻으려면 내 프록시의 구현은 :
public class Proxy: Base
{
...
public override int Method1()
{
return GetStateDependentImplementation().Method1();
}
public override string Method2()
{
return GetStateDependentImplementation().Method2();
}
...
}
public RepeaterOfBase: Base // no any overrides, just inheritance
{ }
public class Proxy: Base
{
private B _b;
private RepeaterOfBase _Base;
public Proxy(B b, RepeaterOfBase aBase)
{
_b = b;
_base = aBase;
}
}
...
public Base GetStateDependentImplementation()
{
if (State == Running)
return _b;
else
return _Base;
}
...
을하지만 기본 클래스의 인스턴스는 매우 거대하고 나는 메모리에 다른 추가 복사본을 가지고하지 않도록해야합니다 : 물론,이 (기본 구현의 집계를) 할 수 있습니다.
그래서 나는
- 는
- 어떤 추가 인스턴스의 응집을 방지하기 위해 가지고 코드 중복을 피하기 위해
- 구현을
- 을 "포장"할 필요가 내 코드를 단순화 할 필요가있다 기본 클래스 (중복)
이러한 목표를 달성 할 수 있습니까?
당신이 옳다, proxy.Implicit.Method1를();} } 을하고는 전화를해야한다 '.'.! 오늘 아침에 시작 했어요 – garik
우수 (특히 오랫동안 문제를 오해 한 후) - 행운을 빌어 요! –
정말 많은 변종을 시도해 봤습니다. 당신이 필요합니다. 완전히 동의해야한다. 감사. ;) – garik