Tag: 激活器

Activator.CreateInstance()麻烦

我有一个工厂应该创建在运行时从类Fooinheritance的对象。 我认为System.Activator.CreateInstance的返回类型与它创建的对象的类型相同,但从以下错误消息判断,其返回类型是Object。 错误1无法将类型’object’隐式转换为’cs_sandbox.Foo’。 存在显式转换(您是否缺少演员?)F:\ projects \ cs_sandbox \ Form1.cs 46 24 cs_sandbox 好吧,也许我错过了一个演员,但是 return (t)System.Activator.CreateInstance(t); 导致另一条错误消息 – 我必须承认 – 这对我没有意义: 错误1找不到类型或命名空间名称’t’(您是否缺少using指令或程序集引用?)F:\ projects \ cs_sandbox \ Form1.cs 45 25 cs_sandbox 这是我的代码: class Foo { } class FooChild1 : Foo { } class FooChild2 : Foo { } class MyFactory { public static Foo CreateInstance(string s) { […]

Activator.CreateInstance找不到构造函数(MissingMethodException)

我有一个具有以下构造函数的类 public DelayCompositeDesigner(DelayComposite CompositeObject) { InitializeComponent(); compositeObject = CompositeObject; } 以及没有参数的默认构造函数。 接下来我正在尝试创建一个实例,但它只能在没有参数的情况下工作: var designer = Activator.CreateInstance(designerAttribute.Designer); 这工作正常,但如果我想传递参数,它不会: var designer = Activator.CreateInstance(designerAttribute.Designer, new DelayComposite(4)); 这会导致MissingMethodException : 未找到构造函数类型Vialis.LightLink.Controller.Scenarios.Composites.DelayCompositeDesigner 这里有什么想法? 问题是我真的需要在施工期间传递一个物体。 你看我有一个设计器加载从CompositeBaseinheritance的所有类型。 然后将这些添加到列表中,用户可以从中将它们拖动到设计器。 执行此操作后,将拖动的实例添加到设计器中。 这些类中的每一个都定义了自定义属性: [CompositeMetaData(“Delay”,”Sets the delay between commands”,1)] [CompositeDesigner(typeof(DelayCompositeDesigner))] public class DelayComposite : CompositeBase { } 当用户选择设计器中的项目时,它会查看这些属性以便为该类型加载设计器。 例如,在DelayComposite的情况下,它将加载一个用户控件,该控件具有一个标签和一个滑块,允许用户设置DelayComposite实例的“Delay”属性。 到目前为止,如果我没有将任何参数传递给构造函数,这可以正常工作。 设计器创建DelayCompositeDesigner的实例,并将其分配给WPF ContentPresenter的content属性。 但由于该设计人员需要在设计器中修改所选DelayComposite的属性,因此我必须将此实例传递给它。 这就是为什么构造函数看起来像这样: public DelayCompositeDesigner(DelayComposite CompositeObject) […]

我如何使用Activator.CreateInstance与字符串?

在我的reflection代码中,我遇到了我的通用代码部分的问题。 特别是当我使用一个字符串。 var oVal = (object)”Test”; var oType = oVal.GetType(); var sz = Activator.CreateInstance(oType, oVal); 例外 An unhandled exception of type ‘System.MissingMethodException’ occurred in mscorlib.dll Additional information: Constructor on type ‘System.String’ not found. 我试过这个用于测试目的,它也发生在这个单一的衬里 var sz = Activator.CreateInstance(“”.GetType(), “Test”); 我最初写的 var sz = Activator.CreateInstance(“”.GetType()); 但是我得到了这个错误 Additional information: No parameterless constructor defined for this object. 如何使用reflection创建字符串?

我可以将Activator.CreateInstance与接口一起使用吗?

我有一个例子: Assembly asm = Assembly.Load(“ClassLibrary1”); Type ob = asm.GetType(“ClassLibrary1.UserControl1”); UserControl uc = (UserControl)Activator.CreateInstance(ob); grd.Children.Add(uc); 我正在创建一个类的实例,但是如何创建实现某个接口的类的实例? 即UserControl1实现ILoad接口。 U:我可以稍后将对象转换为接口,但我不知道程序集中的哪个类型实现了接口。

给定“where T:new()”,“new T()”在内部使用Activator.CreateInstance吗?

如果我有一个类型参数约束new() : void Foo() where T : new() { var t = new T(); } new T()会在内部使用Activator.CreateInstance方法(即reflection)吗?

.NET:无法将对象强制转换为它实现的接口

我有一个类(TabControlH60),它inheritance自基类(UserControl)并实现一个接口(IFrameworkClient)。 我使用.NET Activator类实例化对象。 使用返回的实例,我可以转换为UserControl基类,但不能转换为接口。 我得到的例外是在代码snipet下面。 如何投射界面? object obj = Activator.CreateInstance(objType); Type[] interfaces = obj.GetType().GetInterfaces(); // contains IFrameworkClient m_Client = (UserControl)obj; // base class cast works IFrameworkClient fc = (IFrameworkClient)obj; // interface cast fails // Note: The (IFrameworkClient)obj cast works fine in the debugger Watch window. {“Unable to cast object of type ‘FPG.H60.AFF.TabControlH60’ to type ‘FPG.AFF.Interfaces.IFrameworkClient’.”}

如何使用后期绑定访问Microsoft Word现有实例

我正在c#中开发一些代码,我将与Microsoft Word进行交互。 我希望能够选择重新使用现有实例,或者作为创建新实例的替代方法。 请记住,我想使用LATE BINDING完成所有这些…可以肯定地说我已经找到了在创建新实例时如何使事情正常工作..我只是调用Activator.CreateInstance等。 我遇到的问题是如何重用现有实例,例如,Word已经打开,我想使用该实例。 有没有Activator.UseExistingInstance? 或者类似的东西? 谢谢!