동적 패턴을 사용하고 있습니까? 동적 키워드를 사용하여 모든 메소드/속성을 호출 할 수 있습니다. 맞습니까? myDynamicObject.DoStuff()를 호출하기 전에 메서드가 존재하는지 확인하는 방법 (예 :?)개체에 특정 메서드/속성이 있는지 확인하는 방법은 무엇입니까?
답변
방법입니다 :
public static bool HasMethod(this object objectToCheck, string methodName)
{
var type = objectToCheck.GetType();
return type.GetMethod(methodName) != null;
}
편집 : 당신도 확장 방법을이
처럼 사용할 수 있습니다myObject.HasMethod("SomeMethod");
동적 유형을 사용하지 않는 것이 좋으며 클래스가 인터페이스를 구현하도록하지 않는 것이 좋습니다. 그런 다음 런타임에 객체가 해당 인터페이스를 구현하는지 확인할 수 있으므로 예상되는 메소드 (또는 속성)가 있습니다.
public interface IMyInterface
{
void Somemethod();
}
IMyInterface x = anyObject as IMyInterface;
if(x != null)
{
x.Somemethod();
}
나는 이것이 유일한 유일한 방법이라고 생각합니다.
당신이 말하는 것은 오리 - 타이핑 (duck-typing)입니다. 이것은 객체에 메소드가 있음을 이미 알고 있지만 컴파일러가이를 확인할 수없는 경우에 유용합니다. 예를 들어 COM interop 시나리오에서 유용합니다. (this 기사를 확인하십시오)
예를 들어 오리와 타이핑을 결합하려는 경우 오리 입력의 목표를 놓치고 있다고 생각합니다.
var property = object.GetType().GetProperty("YourProperty")
property.SetValue(object,some_value,null);
유사 반사를 통해
으로 선언 된 항목 개체가 .NET Framework에서 제공하는 개체가 될 수 있다면 무엇이든지 구현하도록 선언 할 수 없습니까? –
무엇이 문제입니까? .NET Framework에서 제공하는 '개체'가 이러한 개체인지 확인하려면 –
과 같은 방법으로 개체에 "추가"메서드가 있는지 확인해야합니다. 그리고 개체가 List
그것은 오래된 질문이지만 방금 만났습니다. 그 이름을 가진 하나 개 이상의 방법이 있다면 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;
}
}
- 1. iframe에 특정 문장이 있는지 확인하는 방법은 무엇입니까?
- 2. 특정 어셈블리가 있는지 확인하는 방법은 무엇입니까?
- 3. 특정 URL에 파일이 있는지 확인하는 방법은 무엇입니까?
- 4. 세션 개체에 특정 키/값 항목이 포함되어 있는지 확인하는 방법
- 5. 현지화가 있는지 확인하는 방법은 무엇입니까?
- 6. 개체가 있는지 확인하는 방법은 무엇입니까?
- 7. 어레이가 있는지 확인하는 방법은 무엇입니까?
- 8. NSManagedObject에 대한 참조가 있는지 확인하는 방법은 무엇입니까?
- 9. Bricolage : 이야기에 특정 필드가 있는지 확인하는 방법?
- 10. 특정 웹 브라우저가 시스템에 설치되어 있는지 확인하는 방법은 무엇입니까?
- 11. 특정 이름의 창이 닫혀 있는지 확인하는 방법은 무엇입니까?
- 12. 클래스에 특정 템플릿 멤버 함수가 있는지 확인하는 방법은 무엇입니까?
- 13. NSArray에 특정 클래스의 객체가 포함되어 있는지 확인하는 방법은 무엇입니까?
- 14. 컬렉션에 특정 유형의 인스턴스가 포함되어 있는지 확인하는 방법은 무엇입니까?
- 15. 텍스트 영역의 특정 행이 비어 있는지 확인하는 방법은 무엇입니까?
- 16. 코코아 터치 : CGPoint가 특정 CGRect에 있는지 확인하는 방법은 무엇입니까?
- 17. 배열의 특정 부분이 다른 배열에 있는지 확인하는 방법은 무엇입니까?
- 18. NSSet에 특정 컨트롤의 터치가 있는지 확인하는 방법은 무엇입니까?
- 19. VB.NET을 사용하여 특정 Excel 파일이 열려 있는지 확인하는 방법은 무엇입니까?
- 20. 특정 필드 값이있는 레코드가 JPA가있는 DB에 있는지 확인하는 방법은 무엇입니까?
- 21. Cell에 Integer가 있는지 확인하는 방법은 무엇입니까?
- 22. 필드에 포커스가 있는지 확인하는 방법은 무엇입니까?
- 23. 하위 창이 있는지 확인하는 방법은 무엇입니까?
- 24. 속도 : 변수가 정의되어 있는지 확인하는 방법은 무엇입니까
- 25. 문자열에 특정 자릿수가 있는지 확인하는 정규식
- 26. 개체에 포커스가 있는지 확인하십시오.
- 27. 자바 스크립트에서 특정 개체에 액세스하는 방법은 무엇입니까?
- 28. AppleScript 개체에 특정 속성이 있는지 확인할 수 있습니까?
- 29. UI 스레드에 있는지 확인하는 방법은 무엇입니까?
- 30. 컴퓨터가 인터넷에 연결되어 있는지 확인하는 방법은 무엇입니까?
* myDynamicObject *의 유형은 무엇인가를 처리? 그것은'DynamicObject'에서 파생 된 클래스입니까? –
동적 키워드 –