나는 이것이 가능하다는 것을 오늘보고 놀랐다. 그러나 나는 이것이 전에 논의되어야한다고 걱정한다.C#은 구조형 입력이 없다는 것을 절대적으로 알고있는 이유는 무엇입니까?
public interface ICanAdd
{
int Add(int x, int y);
}
// Note that MyAdder does NOT implement ICanAdd,
// but it does define an Add method like the one in ICanAdd:
public class MyAdder
{
public int Add(int x, int y)
{
return x + y;
}
}
public class Program
{
void Main()
{
var myAdder = new MyAdder();
var iCanAdd = (ICanAdd)myAdder; //compiles, but for what sake?
int sum = iCanAdd.Add(2, 2); //na, not game for it, cast had already failed
}
}
위의 상황에서 컴파일러는 명시 적 캐스트가 존재 함을 알 수 있습니다. 나는 거기에서 구조적인 타이핑을 감지하기 위해 모두 감격했지만 런타임에는 실패하지 않았다. C#이 언제 여기서 도움이 되었습니까? 그러한 캐스팅과 같은 시나리오는 효과가 있습니까? 그것이 무엇이든, 저는 컴파일러가 myAdder
이 정확히 기술적으로는 ICanAdd
이 아니라는 것을 알고 있습니다.
왜 downvoted? 다른 두뇌 방귀 세션이 있습니까? – nawfal
좋은 질문입니다! '가산기'의 '가산기'는 어디에 있습니까? 'iCanAdd'를 원하셨습니까? – dasblinkenlight
@dasblinkenlight 예. 나는 오타를 편집 할 것이다 :) 그러나 어쨌든 그 선은 명중되지 않는다. – nawfal