다음 코드를 실행하면 RuntimeBinderException: 'object' does not contain a definition for 'SetIt'
이 표시됩니다. 나는 var
에 thing
을 전환하면개인 내부 클래스에서 동적 오류
public interface IInput { }
public interface IThing<in TInput>
{
void SetIt(TInput value);
}
public class ThingMaker
{
private class Thing<TInput> : IThing<TInput>
where TInput : IInput
{
public void SetIt(TInput value){}
}
private class Input : IInput {}
public IThing<IInput> GetThing()
{
return new Thing<IInput>();
}
public IInput GetInput()
{
return new Input();
}
}
class Program
{
static void Main(string[] args)
{
var thingMaker = new ThingMaker();
var input = thingMaker.GetInput();
dynamic thing= thingMaker.GetThing();
thing.SetIt(input);
}
}
는 그것을 잘 작동합니다. 이렇게 명확하게, thing
에는 SetIt
가있다. 동적 사용시 어떻게 실패합니까? 으로 작동하는 어떤 것이 또한 dynamic
일 때 일 것이 아닌가?
내가 공개 할 때 작동하기 때문에 개인 내부 클래스 인 Thing<TInput>
과 관련이 있다고 생각합니다.
class A
{
class B
{
public void M() { }
}
public static object GetB() { return new B(); }
}
class Program
{
static void Main(string[] args)
{
dynamic o = A.GetB();
o.M();
}
}
제네릭 및 인터페이스 그냥 산만 있습니다