gpt4 book ai didi

c# - 定义将在构造函数中使用的类型

转载 作者:行者123 更新时间:2023-11-30 23:22:37 25 4
gpt4 key购买 nike

我想将类型为 AbstractObject 的对象关联到我当前的类。

但是,这必须在构造函数中完成,因为当我定义我的类时,我不知道将关联哪种类型的对象(只知道这是 AbstractObject 类型)。而且我需要在我的类中构造关联对象(所以我不能将实例作为参数)。

所以它会是这样的:

public abstract class MyClass
{
public MyClass(Type T) where T : AbstractObject
{
(T)Actiocator.CreateInstance(Typeof(T));
//To do
}
}

但这行不通。知道如何解决这个问题吗?

最佳答案

根据您的用例,有多种选择。

传入对象

最简单的方法是让调用者构造对象,并通过构造函数将其传入:

public MyClass(AbstractObject template) 
{
// Do something with template
}

提供静态工厂方法

扩展上面的想法,如果你想控制构造函数使用的对象,你可以提供一个静态方法来创建一个 Base 对象并将它传递给构造函数:

private MyClass(AbstractObject template) 
{
// Do something with template
}

public MyClass Create<T>() where T : AbstractObject, new()
{
// Create a temporary object just for passing into the private ctor
return new MyClass(new T());
}

我将构造函数设为私有(private),因此您只能通过静态实例创建一个新的 MyClass 对象:

MyClass.Create<Concrete>();

另请注意,我添加了 new() 约束,因此我可以简单地编写 new T。如果您知道 T 将成为 AbstractObject 的派生类(引用类型),这很好。如果您希望能够从 int 等值类型构造 MyClasses,您可以删除 new() 约束并使用反射。

使类通用

如果您还需要将对象存储在您的类中,请使整个类通用:

public class MyClass<T> where T : AbstractObject, new()
{
private T myObject;
public MyClass()
{
this.myObject = new T();
// Do other stuff
}
}

关于c# - 定义将在构造函数中使用的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38696587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com