C #에서는 인터페이스로 백업하지 않고 이러한 모든 마법 메서드가 나타나는 것을 시작했습니다. 이것이 왜 선택 되었습니까?
설명하겠습니다.
객체가 구현 된 경우 이전 C #에서, IEnumerable인터페이스, 그것은 자동으로 반복 가능한 일 것이다 foreach루프. 그것은 인터페이스에 의해 백업되기 때문에 나에게 의미가 있으며, Iterator반복되는 클래스 내에서 내 자신의 기능 을 가지고 있다면 마술처럼 다른 것을 의미 할 것이라고 걱정하지 않고 그렇게 할 수 있습니다.
분명히, (언제나 확실하지는 않지만) 이러한 인터페이스는 더 이상 필요하지 않습니다. 올바른 이름 변환이 필요합니다.
또 다른 예는 몇 가지 특정 속성을 가진 정확히 이름이 지정된 메서드를 사용하여 객체를 대기 가능하게 만드는 것 GetAwaiter입니다.
이 "매직"을 정적으로 백업 IEnumerable하거나 INotifyPropertyChanged백업 하는 것처럼 인터페이스를 만들지 않겠습니까?
내가 의미하는 바에 대한 자세한 내용 :
http://blog.nem.ec/2014/01/01/magic-methods-c-sharp/
마술 방법의 장단점은 무엇이며 온라인에서 이러한 결정이 내려진 이유를 찾을 수있는 곳이 있습니까?
async/에 대한 인터페이스가 필요한 경우 await.NET 4.5 이후에 작성된 코드로만 작동하며 실행 가능한 대상이 될 수 있습니다. 그러나 메소드 호출로 순전히 구문 변환 await하면 사실 후에 기존 유형 에 기능을 추가 할 수 있습니다 .
foreach처음에 루프백을 위한 기본 기능으로 구현되었습니다 . 이 결코 오브젝트 구현하기위한 요구 사항 없었다 IEnumerable위한 foreach작업에. 그렇게하는 것이 관습이었습니다.