C#-访问仅给定类名的类的CRUD
我的任务是弥合两段遗留代码之间的差距。我不确定这是否重要,但这两段遗留代码是由VB.Net编写的,它们位于一个独立的DLL中,与我的代码将运行的DLL不同 把我的桥留给第二段代码不是问题。我的问题在于遗留代码的第一段;在我离开这段代码的时候,我所要处理的就是所讨论的类的字符串名称;称之为“阿尔法” 我知道我可以使用反射来获取对象:C#-访问仅给定类名的类的CRUD,c#,C#,我的任务是弥合两段遗留代码之间的差距。我不确定这是否重要,但这两段遗留代码是由VB.Net编写的,它们位于一个独立的DLL中,与我的代码将运行的DLL不同 把我的桥留给第二段代码不是问题。我的问题在于遗留代码的第一段;在我离开这段代码的时候,我所要处理的就是所讨论的类的字符串名称;称之为“阿尔法” 我知道我可以使用反射来获取对象: object obj = Activator.CreateInstance(null, "Alpha"); 问题是我似乎无法访问该类的任何方法 obj.NewRow
object obj = Activator.CreateInstance(null, "Alpha");
问题是我似乎无法访问该类的任何方法
obj.NewRow();
obj.Save();
我遇到编译错误,指出“object”不包含我尝试访问的每个方法的定义
我确信这是可能的,而且我可能完全错了。很明显,我遗漏了一些内容,因此我们将非常感谢您的帮助。您需要将结果转换为适当的类型
var obj = (Alpha)Activator.CreateInstance(null, "Alpha");
否则,您只有一个对象(由CreateInstance
返回的类型)。如果没有对类本身的引用,可以使用动态:
dynamic obj = Activator.CreateInstance(null, "Alpha");
但是请注意,使用动态会丢失编译时类型检查。因此,第一种解决方案更可取。您需要将结果强制转换为适当的类型
var obj = (Alpha)Activator.CreateInstance(null, "Alpha");
否则,您只有一个对象(由CreateInstance
返回的类型)。如果没有对类本身的引用,可以使用动态:
dynamic obj = Activator.CreateInstance(null, "Alpha");
但是请注意,使用动态会丢失编译时类型检查。出于这个原因,第一种解决方案更可取。嗯,也许您应该将对象强制转换为刚才实例化的类型?您可能需要将实例强制转换为Alpha
类。也许您可以尝试使用var obj
@Pikohvar
来代替object,但这可能行不通,因为无法从此处的用法推断类型是的,您可能是对的。事实上,我想说的是动态,但它也可能不起作用@TimothyGroote@Pikoh,不,我认为动态会起作用,但它很危险(在这种情况下),而且可能是个坏主意。嗯,也许你应该将对象转换为你刚才实例化的类型?你可能需要将实例转换为Alpha
类。也许您可以尝试使用var obj
@Pikohvar
来代替object,但这可能行不通,因为无法从此处的用法推断类型是的,您可能是对的。事实上,我想说的是动态,但它也可能不起作用@TimothyGroote@Pikoh,不,我认为动态会起作用,但它是危险的(在这种情况下),而且可能是个坏主意。