用父类调用一个方法,而不是用子类调用两个方法

校正

我有课:

public class Throw
{
    public double speed { get; set; }

    public double accurency { get; set; }
}
public class FastThrow : Throw{}

public class LowThrow : Throw{}

而不是:

public static FastThrow SetFastThrow(List<object> args)
{
    return new FastThrow
    {
        speed = (double)args[0],
        accurency = (double)args[1]
    };
}

public static LowThrow SetLowThrow(List<object> args)
{
    return new LowThrow
    {
        speed = (double)args[0],
        accurency = (double)args[1]
    };
}

我想有一个父类:

public static Throw SetThrow(List<object> args)
{
    return new Throw
    {
        speed = (double)args[0],
        accurency = (double)args[1]
    };
}

声明带有父类实例的子类的列表或其他一些通用接口。然后向现有集合添加新元素。我知道下面的例子有编译错误,但它应该是这样的:

List<List<object>> firstList = new List<List<object>>();
public void Main()
{
    IList<FastThrow> secondList = new List<Throw>();

    foreach (var item in firstList)
    {
        secondList.Add(SetThrow(item));
    }
}

我读过逆变,不知道这是否可能。

你不能。而不是

声明带有实例的类的列表或其他一些通用接口

应该

带有儿童实例的声明列表或其他一些通用接口

第二种方式,正如 Anirban 所说,使用泛型类,如下重构你的SetThrow方法:

    public static T SetThrow<T>(List<object> args) where T : Throw, new()
    {
        return new T
        {
            speed = (double)args[0],
            accurency = (double)args[1]
        };
    }

这样你就可以SetThrow使用方法来生成不同种类的类,只要它们是子类。例如:

 IList<FastThrow> secondList = new List<FastThrow>();

            foreach (var item in firstList)
            {
                secondList.Add(SetThrow<FastThrow>(item));
            }

泛型类是强类型的,使用起来很优雅。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么获得父类作为参数调用该方法,而不是一个获取子类作为参数的方法?

为什么用一个参数而不是两个参数调用释放函数?

如何从两个父类中调用“重写”方法?

用相同的方法映射一个类或它的子类

函数调用父类方法而不是子类?

如何从另一个父类方法调用父类方法

为什么父类方法在调用另一个父方法时不传递参数,而子类具有相同名称的方法?

用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?

如果子类使用相同的方法名称扩展了两个类,则子类将调用哪个方法

哪一个实例方法时超类型的方法在这两个超类型和子类型调用方法被称作

Django:两个不同的子类指向同一个父类

锁定两个方法并确保仅在线程上正在调用一个方法

调用子类方法而不调用父类

在超类和方法调用中声明一个子类

同一类的另一个父级的调用方法

如何在一个按钮上调用两个方法@click 但一个接一个执行一个方法

两个流调用Ajax方法,一个在最后需要额外处理

使用两个已定义的参数调用Python方法,但仅传递一个变量

两个模板类相互调用方法

Selenium C#中两个类的调用方法

无法调用通过两个类继承的虚方法

在数组列表中存储同一个父类的两个子类

有没有一种方法可以重构两个方法,一个方法调用一个等待的方法,另一个方法调用一个普通的方法?

从另一个方法内部调用 javascript 类方法,导致“moveToCell 不是函数”错误

用一个域名设置两个IP的正确方法是什么?

如何在python中使用子类的方法调用第二个父类的方法?

在一行中为同一类的两个对象调用相同的方法

coffeescript类-调用从另一个调用一个类方法

JAVA JACKSON:用两个字段而不是所有类序列化一个类