집 >백엔드 개발 >C#.Net 튜토리얼 >C#에서 ILGenerator를 사용하여 함수 인스턴스를 동적으로 생성하는 방법
이 글에서는 ILGenerator를 사용하여 C#에서 동적으로 함수를 생성하는 간단한 코드를 주로 소개합니다. 필요한 친구들은 참고하면 됩니다.
게임 서버에는 항상 읽어야 할 구성 파일이 많고, 이러한 구성 파일은 다음과 같습니다. * 필수 그렇지 않으면 단순히 문자열이나 숫자의 묶음인 약한 유형으로 만들어지며 오류를 볼 수 없습니다(다시 확인해야 함) * 그렇지 않으면 강한 유형으로 만들어지며, 각 유형은 자체적으로 구문 분석되어야 합니다
저는 개인적으로 후자를 선호합니다. 이전 LoadConfig의 코드는 간단하지만 로직 작성 시 코드가 간단하지 않기 때문입니다.
class Config1 : public IConfig { public void Fill(EntryLine& line); int32_t param1; string param2; std::vector<int32_t> param3; }; void Config1::Fill(EntryLine& line) { this->param1 = line.ReadInt32(); this->param2 = line.ReadString(); this->param3 = line.ReadVectorInt32(); }
대략적인 채우기 기능은 위에 쓴 것과 같습니다. , 하지만 ReadInt32와 같은 함수는 허구이며 직접 구현해야 합니다(흠)
그러면 이런 종류의 코드는 작성하기가 매우 짜증나고 실제로 작성하고 싶지 않습니다. 이것이 바로 이 글을 쓰는 이유입니다.
C#에는 XML 역직렬화가 있습니다. 저는 다음과 같이 클래스를 정의합니다.class Config1 { int32 param1; string param2; int[] param3; } XmlSerializer serializer = new XmlSerializer(typeof(Config1)); var obj = (Config1)serializer.Deserialize(stream);이 역직렬화는 매우 간단합니다. 제가 실제로 원하는 것은 Xml 역직렬화가 Node를 사용한다는 것입니다. 그 중 하나는 속성의 값입니다. 이를 제공한 Microsoft에 감사드립니다. .NET Framework 기능을 디버깅하기 위해 .NET 소스 코드를 디버그하고 Microsoft가 이를 어떻게 구현하는지 확인할 수 있습니다. 일부 조사에 따르면 그는 실제로 XmlSerializer가 생성될 때 Config1을 분석한 다음 일부 메타데이터와 읽기/쓰기 메서드를 생성했으며 Deserialize는 Read 메서드를 호출합니다.이제 구현 방법을 알았으니 짐작할 수 있을 것입니다. 기본적으로 프로토타입을 먼저 파악한 다음 프로토타입을 프로그래밍해야 합니다. PS: 아직 성능을 테스트하지는 않았지만 나쁘지 않을 것입니다. 문제는 서버 시작이 몇 초 더 느리다는 것입니다.
위 내용은 C#에서 ILGenerator를 사용하여 함수 인스턴스를 동적으로 생성하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!