una que puede programacion interfaz interfaces instancia implementacion heredar ejemplos declaracion declara cómo crear clase caracteristicas c# linq reflection linq-to-objects

c# - puede - que es una interfaz en programacion



¿Cómo encontrar una implementación de una interfaz C#en el ensamblado actual con un nombre específico? (4)

Tengo una interfaz llamada IStep que puede hacer algunos cálculos (ver " Ejecución en el Reino de los sustantivos "). En tiempo de ejecución, quiero seleccionar la implementación adecuada por nombre de clase.

// use like this: IStep step = GetStep(sName);



Tu pregunta es muy confusa ...

Si desea buscar tipos que implementen IStep, haga esto:

foreach (Type t in Assembly.GetCallingAssembly().GetTypes()) { if (!typeof(IStep).IsAssignableFrom(t)) continue; Console.WriteLine(t.FullName + " implements " + typeof(IStep).FullName); }

Si ya conoce el nombre del tipo requerido, solo haga esto

IStep step = (IStep)Activator.CreateInstance(Type.GetType("MyNamespace.MyType"));


Well Assembly.CreateInstance parece ser el camino a seguir; el único problema con esto es que necesita el nombre completamente calificado del tipo, es decir, que incluya el espacio de nombres.


En base a lo que otros han señalado, esto es lo que terminé escribiendo:

/// /// Some magic happens here: Find the correct action to take, by reflecting on types /// subclassed from IStep with that name. /// private IStep GetStep(string sName) { Assembly assembly = Assembly.GetAssembly(typeof (IStep)); try { return (IStep) (from t in assembly.GetTypes() where t.Name == sName && t.GetInterface("IStep") != null select t ).First().GetConstructor(new Type[] {} ).Invoke(new object[] {}); } catch (InvalidOperationException e) { throw new ArgumentException("Action not supported: " + sName, e); } }