我昨天问了一个关于使用reflection或策略模式dynamic调用方法的问题。 然而,从那以后,我决定将这些方法改为实现一个通用接口的各个类。 原因在于,每个class级虽然具有一些相似之处,但也执行了该class级特有的某些方法。 我一直在使用这样的策略: switch (method) { case "Pivot": return new Pivot(originalData); case "GroupBy": return new GroupBy(originalData); case "Standard deviation": return new StandardDeviation(originalData); case "% phospho PRAS Protein": return new PhosphoPRASPercentage(originalData); case "AveragePPPperTreatment": return new AveragePPPperTreatment(originalData); case "AvgPPPNControl": return new AvgPPPNControl(originalData); case "PercentageInhibition": return new PercentageInhibition(originalData); default: throw new Exception("ERROR: Method " + method + […]
我试图改善我们的应用程序的性能。 我们有很多Activator.CreateInstance调用导致一些悲伤。 我们基于一个接口(ITabDocument)来实例化很多类,然后环顾四周,我想到了使用这个代码: 代码不会比使用我们拥有的Activator.CreateInstance代码更好。 public static Func<T> CreateInstance<T>(Type objType) where T : class, new() { var dynMethod = new DynamicMethod("DM$OBJ_FACTORY_" + objType.Name, objType, null, objType); ILGenerator ilGen = dynMethod.GetILGenerator(); ilGen.Emit(OpCodes.Newobj, objType.GetConstructor(Type.EmptyTypes)); ilGen.Emit(OpCodes.Ret); return (Func<T>)dynMethod.CreateDelegate(typeof(Func<T>)); } 我想知道为什么这是我所做的是: ITabDocument document = CreateInstance<ITabDocument>(Type.GetType("[Company].Something")); 有没有更好的方法来创build可以协助上述的对象? 当你不确定具体types时有点难。
在C#中我有以下对象: public class Item { } public class Task<T> { } public class TaskA<T> : Task<T> { } public class TaskB<T> : Task<T> { } 我想使用C#reflection( Activator.CreateInstance )dynamic创buildTaskA或TaskB。 不过,我不知道types之前,所以我需要dynamic创buildTaskA基于像“namespace.TaskA”或“namespace.TaskAB”string。