2014-10-29 3 views
-1

다음과 같은 문제가 있습니다 : File이라는 클래스가 있는데 뭔가 특별한 일이 생겼을 때이 클래스가 다른 클래스에 알려주기를 원하지만 File에는 알릴 클래스에 대한 참조가 없어야합니다. 나는 이것이 INotifyPropertyChanged -Interface가 해결하는 동일한 문제라고 생각한다. 내 유일한 해결 방법은 정보를 받아야 클래스의 인스턴스와이 클래스의 정적 메서드를 포함하는 정적 목록이지만, 나는 이것이 가장 현명한 방법이 아니라고 생각합니다. 따라서 어떤 개념이 PropertyChanged에 사용됩니까?PropertyChanged 인터페이스 (이벤트 시스템)는 어떻게 작동합니까?

편집 :

반응해야 클래스 (통보) 가정 수 있습니다 FileManager라고는 FinishedReading라는 암시 이벤트를 가지고 있으며,이 클래스는 한 번 인스턴스화 전용입니다. FinishedReading - File 인스턴스에 대한 참조가 없으면 File 클래스의 FinishReading() 메서드에 이벤트를 바인딩 할 수 있습니까? 이미 이벤트로 매개 변수로 FileManager 이벤트를 전달하려고 시도했지만 작동하지 않았습니다.

:이 경우

[global::Microsoft.VisualStudio.TestTools.UnitTesting.TestClass] 
    public class FileManager 
    { 
     public delegate void MyDelegate(); 
     public event MyDelegate FinishedReading; 
    } 

    [global::Microsoft.VisualStudio.TestTools.UnitTesting.TestClass] 
    public class File 
    { 
     // Whats the exact Data-Type of the FinishedReading-Event? 
     public File(FileManager.MyDelegate eventInstance) 
     { 
      eventInstance += FinishReading; 
     } 

     public void FinishReading() 
     { 
      // 
     } 
    } 
+0

[Events (C# 프로그래밍 가이드)] (http://msdn.microsoft.com/en-us/library/awbftdfh.aspx) 여기에서 읽기 시작하십시오. – Clemens

+0

@Clleens hée féger fége 편집, 문제가 생겼습니까? 내 질문을 수정했습니다. 어떻게이 문제를 해결할 수 있습니까? – Feve123

답변

0

내가하지 몇 가지 정적 메서드와 이벤트로 작동합니다. INotifyPropertyChanged은 청취자 시스템의 일종입니다. WPF 시스템은 바인딩 된 클래스가 INotifyPropertyChanged에서 상속되는지 확인하고 필요할 경우 PropertyChanged 메서드를 호출합니다.

첫 번째 솔루션 :

좋아,이 경우에 나는 싱글 FileManage을 만들 것입니다,하지만 당신은 하나의 인스턴스 만 있습니다. 파일에서 FileManage.Singleton.FinishReading() 또는 그와 비슷한 것을 부를 수 있습니다.

public class FileManager 
{ 
    private static readonly FileManager singleton = new FileManager(); 

    public static FileManager Singleton 
    { 
     get { return FileManager.singleton; } 
    } 


    private FileManager() 
    { 

    } 

    public void FinishReading() 
    { 

    } 
} 

public class File 
{ 
    public void FinishReading() 
    { 
     // 
     FileManager.Singleton.FinishReading(); 
    } 
} 

두 번째 솔루션 :

당신은 File의 팩토리로서 귀하의 파일 관리자 클래스를 사용하고 FinishReading()에 대리자를 설정할 수 있습니다. 파일 작성을위한 멋진 인터페이스가 있고 올바른 매개 변수 전달에 신경 쓸 필요가 없습니다.

public class FileManager 
{ 
    public FileManager() 
    { 

    } 

    public File CreateFile() 
    { 
     File f = new File(this.FinishReading); 

     return f; 
    } 

    public void FinishReading() 
    { 

    } 
} 

public class File 
{ 
    public delegate void FinishReadingDelegate(); 
    private FinishReadingDelegate del; 

    public File(FinishReadingDelegate Del) 
    { 
     del = Del; 
    } 


    public void FinishReading() 
    { 
     // 
     del.Invoke(); 
    } 
} 
+0

나는 그 질문을 편집했다. 어떻게 해결할 수 있습니까? – Feve123

+0

@ Feve123 내 게시물을 업데이트했습니다. – BendEg

+0

Danke dir! Singleton-Muster에서 본인의 이름을 따서 구할 수 있습니다. "공장 출근"은 Factory-Konzept입니다. Btw, lernst du C# an der Uni? 영어 : 감사합니다. – Feve123

관련 문제