C\#에서 의뢰 와 이벤트 가 관찰자 모드 에서 의 응용 실례
예 는 다음 과 같다.
애완동물 추적 기 가 애완동물 에 게 걸 려 있 는데 애완동물 이 주인 에 게 서 100 미터 떨 어 지면 주인의 손 에 있 는 모니터 에 경고 메시지 가 표시 되 고 소리 가 울 린 다.
class Program
{
static void Main(string[] args)
{
PetTracker tracker = new PetTracker();
tracker.InstanceTrack();
Console.ReadKey();
}
}
public class PetTracker
{
private int distance;
//
public void InstanceTrack()
{
for (int i = 0; i < 102; i++)
{
distance = i;
if (distance > 100)
{
MakeAlert(distance);
ShowAlert(distance);
}
}
}
//
private void MakeAlert(int param)
{
Console.WriteLine(" , " + param + " , ~~");
}
//
private void ShowAlert(int param)
{
Console.WriteLine(" " + param + " , ~~");
}
}
실행 결 과 는 다음 그림 과 같 습 니 다.감시 대상 및 관찰자 Observer 정의:
만약 상기 세 가지 방법 을 다른 종류 에 봉 한다 면 그것 은:
public class PetTracker
{
private int distance;
//
public void InstanceTrack()
{
for (int i = 0; i < 102; i++)
{
distance = i;
if (distance > 100)
{
}
}
}
}
public class MakerAlertSupplier
{
//
public void MakeAlert(int param)
{
Console.WriteLine(" , " + param + " , ~~");
}
}
public class ShowAlertSupplier
{
//
public static void ShowAlert(int param)
{
Console.WriteLine(" " + param + " , ~~");
}
}
우리 가 해결 해 야 할 문 제 는:PetTracker 류 의 InstanceTrack()방법 에서 distance>100 이 되면 MakerAlert Supplier 와 ShowAleart Supplier 에 어떻게 알려 야 합 니까?
위의 세 가지 유형 을 어떻게 보 십 니까?
●PetTracker 는 감시 대상 으로 볼 수 있다.
●MakerAlertSupplier 와 ShowAleartSupplier 는 관찰자,즉 Observer 로 간주한다.
해결 방법:
1.Observer 의 방법 매개 변 수 는 모두 int 형식 임 을 고려 하여,응,다른 방법 명,같은 매개 변수 목록 을 고려 하여,우 리 는 당연히 피 감시 대상 에서 의뢰 를 정의 할 수 있 으 며,observer 방법 과 같은 매개 변수 목록 을 가지 고 있 습 니 다.
2、감시 대상 의 의뢰 가 촉발 되 어 Observer 를 촉발 하 는 방법 은 어떻게 합 니까?이벤트 변 수 를 통 해 Observer 의 방법 을 의뢰 에 연결 하 는 의뢰 형식의 이벤트 가 필요 합 니 다.
3.마지막 으로 감시 대상 이 방법 을 실행 할 때 의뢰 유형의 사건 을 촉발 하여 Observer 방법 을 촉발 합 니 다.
전체 코드 는 다음 과 같 습 니 다:
class Program
{
static void Main(string[] args)
{
PetTracker tracker = new PetTracker();
tracker.TrackEvent += (new MakerAlertSupplier()).MakeAlert;
tracker.TrackEvent += ShowAlertSupplier.ShowAlert;
tracker.InstanceTrack();
Console.ReadKey();
}
}
public class PetTracker
{
private int distance;
public delegate void TrackHandler(int param); //
public event TrackHandler TrackEvent; //
//
public void InstanceTrack()
{
for (int i = 0; i < 102; i++)
{
distance = i;
if (distance > 100)
{
if (TrackEvent != null)
{
TrackEvent(distance);
}
}
}
}
}
public class MakerAlertSupplier
{
//
public void MakeAlert(int param)
{
Console.WriteLine(" , " + param + " , ~~");
}
}
public class ShowAlertSupplier
{
//
public static void ShowAlert(int param)
{
Console.WriteLine(" " + param + " , ~~");
}
}
실행 결 과 는 다음 그림 과 같 습 니 다.총 결 은 다음 과 같다.
●방법 명 에 따라 매개 변수 목록 이 같은 여러 가지 방법 이나 방법 에 대해 그들의 정 의 를 추상 화 했다.
●의뢰 의 집행 과 등록 은 의뢰 유형의 사건 에 맡 겼 다.
●의뢰 는 피 감시 대상 내부 에 국한 되 어 있 으 며,성명 은 Public 이지 만 클 라 이언 트 에 서 는 피 감시 대상 의 의뢰 변 수 를 할당 할 수 없습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WebView2를 Visual Studio 2017 Express에서 사용할 수 있을 때까지Evergreen .Net Framework SDK 4.8 VisualStudio2017에서 NuGet을 사용하기 때문에 패키지 관리 방법을 packages.config 대신 PackageReference를 사용해야...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.