질문 : 리플렉션을 사용하여 클래스 정의를 복제 할 수 있습니까? 나는 얕은 복제 나 깊은 복제에 대해서 말하고있는 것이 아닙니다. 정의 복제에 대해 이야기하고 있습니다. 모든 인스턴스간에 공유되지 않는 정적 변수를 가진 클래스가 필요하지만, 내가 만든 정의 만 갖고 싶습니다. 그리고 나 (또는 도서관)는 나중에이 클래스에서 인스턴스를 생성 할 수 있어야합니다.클라스 정의 (PCL)
문제점 : 당신이 볼 , 나는
나 종류가 특정 정적 메소드를 갖는를 제공 할 것으로 예상이 라이브러리가 있기 때문에 다음과 같은 시나리오의이 필요합니다. 그러나 내 경우에는이 정적 메서드는 다른 형식의 정적 필드가 아닌 두 값을 비교해야합니다. 따라서 아직 초기화되지 않았으므로 클래스에 정보가있는 인스턴스를 전달할 수 없습니다. 상황을 다음 예를 체크 아웃 :
class MasterClass
{
public int SomeInfo {get; set;} = 10;
public void PeresentClass()
{
SOMELIBRARY.RegisterType(typeof(StaticClass));
}
}
class StaticClass
{
public static bool CanCreate(int someVar)
{
// I need to compare someVar with the SomeInfo property of MasterClass instance that presented this type to the SOMELIBRARY.
}
public StaticClass()
{
// Something irrelevant
}
}
을 나는 SOMELIBRARY
를 통제하고이 코드를 작성하기로 결정 방법이 없습니다 위의 예에서. 그러나 어떤 사람들은 CanCreate
메서드를 먼저 호출 한 다음 요구 사항을 충족하는 경우 클래스의 인스턴스를 만드는 방법을 사용하는 것으로 보입니다.
그러나 CanCreate
은 올바르게 작동하려면 클래스의 인스턴스에 액세스해야합니다. StaticClass
을 SOMELIBRARY
에 첫 번째로 입력해야합니다. 그리고 때마다 활성화되는이 클래스의 인스턴스가 두 개 이상 있기 때문에 MasterClass
을 정적으로 만들 수 없습니다.
내가 생각할 수있는 유일한 방법은 새 필드 StaticClass
을 정의한 MasterClass
을 가리키는 정적 필드로 다시 정의하는 것이 었습니다. 정의를 복제했습니다. 그러나 반영에 대한 나의 지식은 아직 그렇게하지 못했습니다. 그래서 여기에 나는 이것이 가능하다는 것을 묻고있다. 그리고 저는 PCL 프로파일 하에서 그것을 할 수 있기를 정말로 원합니다.
현실 세계 : 그냥 자세한 내용은, 실제로 약 XAMARIN.iOS
및 NSUrlProtocol
클래스, 특별히 CanInitWithRequest
방법을 이야기하고있다.
가능한 해결책 : 더 많은 생각을하면이 문제를 해결할 수있는 다른 방법은 StaticClass
을 일반화하는 것입니다. 이렇게하면 type
정의 당 정적 변수를 가질 수 있습니다. 그러나 이것이 작동하려면 런타임에 고유하고 가능한 빈 유형을 생성 할 수 있어야합니다. 이것이 가능한가?
XAMARIN.iOS : 불행히도 Reflection.Emit은 iOS에서 사용할 수 없으므로 지금까지는 어떤 식 으로든 이것이 가능하다고 생각하지 않습니다. 아직 상황에 대한 의견을 기다리고 있습니다.
https://developer.xamarin.com/guides/ios/advanced_topics/limitations/#System.Reflection.Emit
정확히 어떤 SOMELIBRARY가 StaticClass와 정확히 일치합니까? – Evk
@Evk : 클래스의 새로운 인스턴스를 생성하기 전에 CanCreate 메소드를 호출하여 클래스가 특정 상황을 처리 할 수 있는지 확인합니다. –
CanCreate가 정적 메서드 인 이유는 무엇입니까? 그것이 일부 도서관의 요구 사항입니까? – Evk