약간의 비틀어서 관찰자 패턴을 구현하려고하는데 Subject와 Observer가 같은 클래스입니다. 예 :Observer 패턴 C# generics 사용
class myclass
{
public delegate void UpdateHandler(object sender);
public event UpdateHandler UpdateEvent;
public Attach(myclass obj){ // use delegate to attach update function of obj}
public Update(object sender){ // do something with sender}
public Notify() { // use UpdateEvent to update all attached obj's }
}
이렇게하면 정상적으로 작동합니다. 이제 나는 업데이트 이벤트가있을 때마다 권투 및 언 박싱에 의해 부과 된 성과 패널티를 제거하여 객체 기반 구현을 제거하고 제네릭을 사용하려고합니다. 예를 들어,
class myclass<Tin, Tout>
{
public delegate void UpdateHandler(Tout sender);
public event UpdateHandler UpdateEvent;
public Attach(myclass<Tin,Tout> obj)
{ // use delegate to attach update function of obj}
public Update(Tin sender){ // do something with sender}
public Notify()
{ // use UpdateEvent to update all attached obj's
// but now we have to send Tout
}
}
이것은 내가 한 이벤트 핸들러를 가지고 있기 때문에, 그것은 주석 또는 투트 수 있지만 둘 수 있습니다 작동하지 않습니다. 이 문제를 어떻게 해결할 수 있습니까? 디자인을 변경하는 다른 제안도 환영합니다. 이것을 읽어 주셔서 대단히 감사합니다. 그리고이 질문을 이해하기에 충분할만큼 분명하기를 바랍니다.
값 유형을 사용하지 않으므로이 코드에는 권투가 없습니다. – SLaks
좋아요, 이건 더 기본적인 것 같아요. 함수에서 객체를 얻었을 때 제 타입으로 캐스팅해야 할 때가 있습니다. 성능상의 불이익은 없었습니까? – fadini
이벤트는 이미 관찰자 패턴을 구현합니다. 이벤트에 원하는 대리인을 첨부하여 목록에 추가 할 수 있습니다. 이 이벤트는 귀하가 원하는 모든 정보를 전달할 수 있습니다. 뭐가 문제 야? –