我正在使用Activator.CreateInstance在运行时从Dll创建一个对象,
如果对象是接口我得到一个错误,我不想创建该接口的对象.
所以我的问题是有没有选项来检查对象是否是接口而不是类?
我有一个基类,如下所示:
public Data()
{
id = num++;
SetVariables();
}
//fill every Variable varNames, parseInduction, noise, seperator in Children Classes
public Data(String line)
{
//first declare all variables in sub classes
if (id == 0)
throw new NotSupportedException("You are not allowed to use this constructor for creating the first instance!");
id = num++;
SetVariables();
parseLine(line);
}
Run Code Online (Sandbox Code Playgroud)
而且我还有一个扩展这个类的子类。
class DienstGruppe : Data
{
protected override void SetVariables(){
varNames = new String[] {"id", "name"};
parseInduction = "DienstGruppen = {";
parseEnd = "};";
beginOfDataLine …Run Code Online (Sandbox Code Playgroud) 该类将被声明runtime并values存储在Bag像session或的对象中ViewBag.现在我想创建一个类的实例,并使用Bag数据设置它的属性 .我知道我应该使用reflection,但我不知道是否有任何开箱即用的方法或者我应该创建一个?
session["Foo"] = "foo";
session["Bar"] = "bar";
var instance = System.Activator.CreateInstance(Type.GetType(className));
instance = ? // how to set properties using session
Run Code Online (Sandbox Code Playgroud)
该类在设计时间不可用,应用程序不知道它的属性是什么.
我正在寻找一种比Activator.CreateInstance从其类型实例化类更快的方法。
我现在正在这样做:Activator.CreateInstance(typeof(LoginView));但它非常慢:我在实例化不同视图时看到一些滞后。
给我一个建议?我现在在谷歌上搜索了几个小时,但我没有找到比这更快的方法来完成我想做的事情..:/
多谢 (:
我想要实现的是将以下方法转换为更通用的方法:
private Task<TestResult> SpecificServiceWarmUp(string serviceEndPoint)
{
return Task<TestResult>.Factory.StartNew(() =>
{
using (var service = new MySpecificClient(serviceEndPoint))
{
// do some stuff with specific client
}
});
}
Run Code Online (Sandbox Code Playgroud)
更通用的版本看起来像:
private Task<TestResult> GenericServiceWarmUp<TService>(string serviceEndPoint)
{
return Task<TestResult>.Factory.StartNew(() =>
{
using (/* instance of TService */)
{
// do some stuff with generic client
}
});
}
Run Code Online (Sandbox Code Playgroud)
我不知道的是如何告诉using块Activator用于创建泛型类型的实例.这可能吗?如果是这样,我该怎么做?
在以下示例中,我可以通过字符串动态创建对象; 但是,我无法获得BASE类的公共方法.我无法将obj转换为BASE因为我不知道在设计时将使用什么泛型.在运行时这样做的任何建议都会很好.
项目A包含A类{T,J>:BASE {T,J>
项目B包含B类{T,J>:BASE {T,J>
Project C包含Class BASE {T,J>
public virtual control {T,J> item
Project Windows Form
cmdGo_Click事件
string dll = textbox1.text // ex"ProjectA.dll"
string class = textbox2.text // ex"A`2 [enuT,enuJ]"
object obj = activator.createinstancefrom(dll,class)
我正在开发一些使用com库的代码.我正在尝试通过创建类的实例
Type t = Activator.CreateInstance("TypeID");
Run Code Online (Sandbox Code Playgroud)
但我不能一直得到它的类型= null.progid已经通过Ole/COM Wever查看,似乎我确实输入了它.在什么可能是prolem?
基本上我要做的是创建一个可以使用大量创建对象的类
Activator.CreateInstance(Type type, params object[] args)
Run Code Online (Sandbox Code Playgroud)
我需要将所有对象蓝图传递给一个名为ObjectMap的类的构造函数.它需要是一个类型和参数的对.如果允许解决方案,它也可以是另一个类而不是构造函数的方法.
有点像
new ObjectMap([Type, somevalue, somevalue, somevalue], [Type, somevalue], [Type] ...)
Run Code Online (Sandbox Code Playgroud)
要么
Resources.AddObjectMap([Type, somevalue, somevalue, somevalue], [Type, somevalue], [Type] ...)
Run Code Online (Sandbox Code Playgroud)
我不知道如何制作它,以便您可以传递可变数量的对与可变数量的参数(甚至0).哎呀,我甚至很难解释这个问题.问我任何你不清楚的事情= S.
Gr.Viller
我将读取一个字符串输入,它将确定要创建的派生类的类型.然后,创建的对象将添加到基类对象列表中.
当我尝试将结果添加Activator.CreateInstance();到列表中时,我得到:
Cannot implicitly convert type 'object' to 'Namespace.Animal'. An explicit conversion exists (are you missing a cast?)
我得到了以下内容:
List<Animal> animals;
Type animal_type = Type.GetType(class_name); // eg lion, tiger
object new_animal = Activator.CreateInstance(animal_type);
animals.Add(new_animal);
Run Code Online (Sandbox Code Playgroud)
如何将新创建的对象添加到列表中?
activator ×9
c# ×9
inheritance ×2
reflection ×2
casting ×1
com ×1
constructor ×1
extending ×1
generics ×1
interface ×1
list ×1
runtime ×1
types ×1
using ×1
viewbag ×1