gpt4 book ai didi

c# - C#中如何将对象作为参数传递

转载 作者:行者123 更新时间:2023-12-02 22:08:38 25 4
gpt4 key购买 nike

抱歉,我可能缺乏术语,但尽管问题微不足道,但我的搜索没有提供任何答案。开始了 -

我有一个父类(super class),希望能够使用如下方法创建任何子类的新对象:

static void AddNewVehicle(string brand, string model, int year, int price)
{
V.Add(new Car(brand, model, year, price));
}

我想象我可以这样做:

static void AddNewVehicle(object VehicleType, string brand, string model, int year, int price)
{
V.Add(new VehicleType(brand, model, year, price));
}

...但我收到以下错误:

“找不到类型或命名空间名称‘VehicleType’(是否缺少 using 指令或程序集引用?)”

最佳答案

在您的场景中,您已将 VehicleType 指定为使用类型 object 声明的变量的名称。您不能像这样实例化对象。

如果您可以提供有关您的问题的更多信息,我会尝试提供更具体的答案。

例如,您可以向名为 VehicleTypeVehicle 类添加一个新属性,它的类型为 enum

或者,如果您需要在一个集合中包含多种类型的车辆,您可能希望实现工厂模式并使用接口(interface)来处理集合。

根据评论编辑:

有多种方法可以做到这一点,所以我提到了到目前为止其他人没有提到的一种。它基于反射。基本上,您在程序集中搜索继承“父类(super class)”的类,如果它们的名称与提供的参数一致,则将其实例化。
但是,我们可以使用名为 Activator 的类来简化此过程。我们所需要的只是包含所需类的程序集的名称及其名称。 Activator 将为我们创建它的实例。

这是一个让您入门的示例:

public static SuperClass GetClass(string type)
{
return (SuperClass)Activator.CreateInstance("someAssemblyName", "type");
}

或来自 MSDN 的更多信息:http://msdn.microsoft.com/en-us/library/b4wc81dc.aspx

当然你可以在任何进一步的操作之前修改属性,也许是这样的:

public static SuperClass GetClass(string type, string brand, string model)
{
SuperClass sc = (SuperClass)Activator.CreateInstance("someAssemblyName", "type");
sc.Brand = brand;
sc.Model = model;

return sc;
}

关于c# - C#中如何将对象作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15735011/

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