Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ AddInterfaceImpl()

void System.Reflection.DispatchProxyGenerator.ProxyBuilder.AddInterfaceImpl ( [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] Type iface)
inlinepackage

Definition at line 316 of file DispatchProxyGenerator.cs.

317 {
321 foreach (PropertyInfo runtimeProperty in iface.GetRuntimeProperties())
322 {
323 PropertyAccessorInfo value = new PropertyAccessorInfo(runtimeProperty.GetMethod, runtimeProperty.SetMethod);
324 if (runtimeProperty.GetMethod != null)
325 {
326 dictionary[runtimeProperty.GetMethod] = value;
327 }
328 if (runtimeProperty.SetMethod != null)
329 {
330 dictionary[runtimeProperty.SetMethod] = value;
331 }
332 }
334 foreach (EventInfo runtimeEvent in iface.GetRuntimeEvents())
335 {
336 EventAccessorInfo value2 = new EventAccessorInfo(runtimeEvent.AddMethod, runtimeEvent.RemoveMethod, runtimeEvent.RaiseMethod);
337 if (runtimeEvent.AddMethod != null)
338 {
339 dictionary2[runtimeEvent.AddMethod] = value2;
340 }
341 if (runtimeEvent.RemoveMethod != null)
342 {
343 dictionary2[runtimeEvent.RemoveMethod] = value2;
344 }
345 if (runtimeEvent.RaiseMethod != null)
346 {
347 dictionary2[runtimeEvent.RaiseMethod] = value2;
348 }
349 }
350 foreach (MethodInfo runtimeMethod in iface.GetRuntimeMethods())
351 {
352 if (!runtimeMethod.IsVirtual || runtimeMethod.IsFinal)
353 {
354 continue;
355 }
359 if (dictionary.TryGetValue(runtimeMethod, out var value3))
360 {
361 if (runtimeMethod.Equals(value3.InterfaceGetMethod))
362 {
363 value3.GetMethodBuilder = methodBuilder;
364 }
365 else
366 {
367 value3.SetMethodBuilder = methodBuilder;
368 }
369 }
371 {
372 if (runtimeMethod.Equals(value4.InterfaceAddMethod))
373 {
374 value4.AddMethodBuilder = methodBuilder;
375 }
376 else if (runtimeMethod.Equals(value4.InterfaceRemoveMethod))
377 {
378 value4.RemoveMethodBuilder = methodBuilder;
379 }
380 else
381 {
382 value4.RaiseMethodBuilder = methodBuilder;
383 }
384 }
385 }
386 foreach (PropertyInfo runtimeProperty2 in iface.GetRuntimeProperties())
387 {
388 PropertyAccessorInfo propertyAccessorInfo = dictionary[runtimeProperty2.GetMethod ?? runtimeProperty2.SetMethod];
389 if (!(propertyAccessorInfo.GetMethodBuilder == null) || !(propertyAccessorInfo.SetMethodBuilder == null))
390 {
392 select p.ParameterType).ToArray());
393 if (propertyAccessorInfo.GetMethodBuilder != null)
394 {
395 propertyBuilder.SetGetMethod(propertyAccessorInfo.GetMethodBuilder);
396 }
397 if (propertyAccessorInfo.SetMethodBuilder != null)
398 {
399 propertyBuilder.SetSetMethod(propertyAccessorInfo.SetMethodBuilder);
400 }
401 }
402 }
403 foreach (EventInfo runtimeEvent2 in iface.GetRuntimeEvents())
404 {
405 EventAccessorInfo eventAccessorInfo = dictionary2[runtimeEvent2.AddMethod ?? runtimeEvent2.RemoveMethod];
406 if (!(eventAccessorInfo.AddMethodBuilder == null) || !(eventAccessorInfo.RemoveMethodBuilder == null) || !(eventAccessorInfo.RaiseMethodBuilder == null))
407 {
409 if (eventAccessorInfo.AddMethodBuilder != null)
410 {
411 eventBuilder.SetAddOnMethod(eventAccessorInfo.AddMethodBuilder);
412 }
413 if (eventAccessorInfo.RemoveMethodBuilder != null)
414 {
415 eventBuilder.SetRemoveOnMethod(eventAccessorInfo.RemoveMethodBuilder);
416 }
417 if (eventAccessorInfo.RaiseMethodBuilder != null)
418 {
419 eventBuilder.SetRaiseMethod(eventAccessorInfo.RaiseMethodBuilder);
420 }
421 }
422 }
423 }
bool TryGetValue(TKey key, [MaybeNullWhen(false)] out TValue value)
MethodBuilder AddMethodImpl(MethodInfo mi, int methodInfoIndex)
static int DefineProperty(QCallModule module, int tkParent, string name, PropertyAttributes attributes, byte[] signature, int sigLength)
static int DefineEvent(QCallModule module, int tkParent, string name, EventAttributes attributes, int tkEventType)
void AddInterfaceImplementation([DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] Type interfaceType)

References System.Reflection.DispatchProxyGenerator.ProxyBuilder._assembly, System.Reflection.DispatchProxyGenerator.ProxyBuilder._methodInfos, System.Reflection.DispatchProxyGenerator.ProxyBuilder._tb, System.Collections.Generic.List< T >.Add(), System.Reflection.Emit.TypeBuilder.AddInterfaceImplementation(), System.Reflection.DispatchProxyGenerator.ProxyBuilder.AddMethodImpl(), System.count, System.Collections.Generic.List< T >.Count, System.Reflection.Emit.TypeBuilder.DefineEvent(), System.Reflection.Emit.TypeBuilder.DefineProperty(), System.dictionary, System.Reflection.DispatchProxyGenerator.ProxyAssembly.EnsureTypeIsVisible(), System.Collections.Generic.Dictionary< TKey, TValue >.TryGetValue(), and System.value.