【发布时间】:2020-01-18 22:05:10
【问题描述】:
我需要创建一个类
Average<T>
包含 3 个方法:
- T average() - 返回 T 值集合的平均值;
- add(T item) - 将项目添加到 T 值集合中
- reset() - 将 Average 实例重置为其默认状态
T 必须是数字(int、float、byte 等)
据我了解,我必须创建基础抽象类或接口:
public abstract class NumericBase<T>{}
我的派生类继承的:
public class NumericInt:NumericBase<int>{}
之后我应该创建我的平均类:
public class Average<T> where T: NumericBase<T>
但我猜最后一步是错误的,因为我必须在 Average 类中创建方法 add(T item),如果我正确理解了这个任务,它必须像这样工作:
Average<int> av = new Average();
av.add(3);
av.add(4);
int averageValue = av.average();
av.reset();
我整天都在努力解决这个问题,所以我什么也没做。谁能帮我解决这个问题?
【问题讨论】:
-
数字没有这样的通用约束。我不确定您是否真的需要使用泛型类型,但如果出于学习目的您只想使用泛型和
Enumerable方法,您可以在构造函数中检查T的类型,如果它不是允许的类型之一类型(例如 int 和 double)然后抛出异常。 -
我尝试为我需要的每种类型使用派生类并覆盖包含所有添加的 T 项的抽象属性 ValueList,我尝试创建由我的抽象 NumericBase 类的构造函数初始化的 ItemType 属性在 Add 函数中使用它作为参数类型。
-
拥有抽象基类不会改变第一条评论中提到的内容。仅出于学习目的,作为示例,我分享了一个答案。
-
谢谢。但任务是这样制定的。在这个任务中使用泛型不是我的决定。
-
@DmitryL 没问题。希望你明白这一点。据我所知,基本上所有的答案都在建议多个课程。因此,请确保您阅读了我的回答中的蓝点:)