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

校正

我有课:

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条评论
登录后参与评论

相关文章

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

两个线程调用一个方法

来自分类Dev

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

来自分类Dev

用一个vs.两个块参数调用`Hash#map`

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

用方法比较两个类对象

来自分类Dev

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

来自分类Dev

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

来自分类Dev

从两个父类继承(从一个基类继承),但某些方法不起作用

来自分类Dev

Java的类制作一个ArrayList并调用类的方法

来自分类Dev

通常,当两个子类共享同一个父类时,是否可以从另一个子类访问子类?

Related 相关文章

  1. 1

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

  2. 2

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

  3. 3

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

  4. 4

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

  5. 5

    两个线程调用一个方法

  6. 6

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

  7. 7

    用一个vs.两个块参数调用`Hash#map`

  8. 8

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

  9. 9

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

  10. 10

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

  11. 11

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

  12. 12

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

  13. 13

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

  14. 14

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

  15. 15

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

  16. 16

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

  17. 17

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

  18. 18

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

  19. 19

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

  20. 20

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

  21. 21

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

  22. 22

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

  23. 23

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

  24. 24

    用方法比较两个类对象

  25. 25

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

  26. 26

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

  27. 27

    从两个父类继承(从一个基类继承),但某些方法不起作用

  28. 28

    Java的类制作一个ArrayList并调用类的方法

  29. 29

    通常,当两个子类共享同一个父类时,是否可以从另一个子类访问子类?

热门标签

归档