Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#-访问仅给定类名的类的CRUD_C# - Fatal编程技术网

C#-访问仅给定类名的类的CRUD

C#-访问仅给定类名的类的CRUD,c#,C#,我的任务是弥合两段遗留代码之间的差距。我不确定这是否重要,但这两段遗留代码是由VB.Net编写的,它们位于一个独立的DLL中,与我的代码将运行的DLL不同 把我的桥留给第二段代码不是问题。我的问题在于遗留代码的第一段;在我离开这段代码的时候,我所要处理的就是所讨论的类的字符串名称;称之为“阿尔法” 我知道我可以使用反射来获取对象: object obj = Activator.CreateInstance(null, "Alpha"); 问题是我似乎无法访问该类的任何方法 obj.NewRow

我的任务是弥合两段遗留代码之间的差距。我不确定这是否重要,但这两段遗留代码是由VB.Net编写的,它们位于一个独立的DLL中,与我的代码将运行的DLL不同

把我的桥留给第二段代码不是问题。我的问题在于遗留代码的第一段;在我离开这段代码的时候,我所要处理的就是所讨论的类的字符串名称;称之为“阿尔法”

我知道我可以使用反射来获取对象:

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
@Pikoh
var
来代替object,但这可能行不通,因为无法从此处的用法推断类型是的,您可能是对的。事实上,我想说的是
动态
,但它也可能不起作用@TimothyGroote@Pikoh,不,我认为动态会起作用,但它很危险(在这种情况下),而且可能是个坏主意。嗯,也许你应该将对象转换为你刚才实例化的类型?你可能需要将实例转换为
Alpha
类。也许您可以尝试使用
var obj
@Pikoh
var
来代替object,但这可能行不通,因为无法从此处的用法推断类型是的,您可能是对的。事实上,我想说的是
动态
,但它也可能不起作用@TimothyGroote@Pikoh,不,我认为动态会起作用,但它是危险的(在这种情况下),而且可能是个坏主意。