我不知道是否理解您的问题有误,但在C#中创建给定类SomeObject
的对象非常简单,只需要按照以下步骤操作:
var obj = new SomeObject();
使用
Activator
类,它应该像下面这样之一:
var obj2 = Activator.CreateInstance(typeof(SomeObject));
var obj3 = Activator.CreateInstance<SomeObject>();`
var someObjType = Type.GetType("SomeObject"); // if you have to use a string
var obj4 = Activator.CreateInstance(someObjType);
请注意,大多数情况下不需要使用
Activator
类来实例化对象。如果您在编译时知道类的
Type
,则第一个示例是标准方式。
更新
关于您的更新,由于我不知道细节,我想到的是懒加载。由于在C#中,包括应用程序入口在内的所有内容都是对象,您可以像以下示例中使用带有备份字段的属性来解决问题。
class Program
{
private SomeObject obj1;
private SomeObject obj2;
private SomeObject obj3;
private SomeObject obj4;
private SomeObject obj5;
public SomeObject Obj1
{
get
{
if (obj1 == null)
{
obj1 = new SomeObject();
}
return obj1;
}
}
[...]
}
如果你担心对象的内存使用情况,我建议你学习如何正确实现IDisposable。
更新2:为了提供由@Mad Sorcerer在评论中推荐的可能性,您可以使用Lazy类支持字段,这会减少你的工作量,效果与以前的更新相同。
class Program
{
// Lazy backing fields
private Lazy<SomeObject> obj1 = new Lazy<SomeObject>();
private Lazy<SomeObject> obj2 = new Lazy<SomeObject>();
private Lazy<SomeObject> obj3 = new Lazy<SomeObject>();
private Lazy<SomeObject> obj4 = new Lazy<SomeObject>();
private Lazy<SomeObject> obj5 = new Lazy<SomeObject>();
// this way, obj1 only gets instanciated when needed
public SomeObject Obj1
{
get { return obj1.Value; }
}
// same for the other objects
[...]
}
Activator
对象 - 只需使用SomeObject someObj = new SomeObject();
即可。 - Tim