아마도 동적 패턴을 사용합니까? 동적 키워드를 사용하여 모든 메소드 / 프로퍼티를 호출 할 수 있습니다. 예를 들어 myDynamicObject.DoStuff ()를 호출하기 전에 메소드가 존재하는지 확인하는 방법은 무엇입니까?
답변
당신은 그런 식으로 쓸 수 있습니다 :
public static bool HasMethod(this object objectToCheck, string methodName)
{
var type = objectToCheck.GetType();
return type.GetMethod(methodName) != null;
}
편집 : 확장 방법을 사용하여 다음과 같이 사용할 수도 있습니다
myObject.HasMethod("SomeMethod");
답변
반사를 통해
var property = object.GetType().GetProperty("YourProperty")
property.SetValue(object,some_value,null);
메소드와 유사
답변
그것은 오래된 질문이지만 방금 뛰어 들었습니다.
Type.GetMethod(string name)
해당 이름을 가진 메소드가 둘 이상인 경우 AmbiguousMatchException을 발생 시키므로 해당 경우를 처리하는 것이 좋습니다.
public static bool HasMethod(this object objectToCheck, string methodName)
{
try
{
var type = objectToCheck.GetType();
return type.GetMethod(methodName) != null;
}
catch(AmbiguousMatchException)
{
// ambiguous means there is more than one result,
// which means: a method with that name does exist
return true;
}
}
답변
이것을 위해 동적 유형을 사용하지 않고 클래스가 인터페이스를 구현하게하는 것이 좋지 않을 것입니다. 그런 다음 런타임에 객체가 해당 인터페이스를 구현하고 예상 된 메서드 (또는 속성)를 가지고 있는지 확인할 수 있습니다.
public interface IMyInterface
{
void Somemethod();
}
IMyInterface x = anyObject as IMyInterface;
if( x != null )
{
x.Somemethod();
}
이것이 유일한 방법이라고 생각합니다.
당신이 말하는 것은 오리 타이핑입니다. 이것은 객체에 메소드가 있음을 이미 알고 있지만 컴파일러가 확인할 수없는 시나리오에서 유용합니다. 예를 들어 COM interop 시나리오에서 유용합니다. ( 이 기사를 확인 하십시오)
예를 들어 오리 타이핑을 리플렉션과 결합하려면 오리 타이핑의 목표를 놓친 것 같습니다.