【问题标题】:Multiple classes with same properties but different types具有相同属性但类型不同的多个类
【发布时间】:2020-08-05 17:25:48
【问题描述】:

我想创建一个与另一个类具有相同字段名称但具有不同字段类型的类。 例如:

public class Core
{
    public float Temperature { get; private set; }
    public float Load { get; private set; }
    public float Clock { get; private set; }

...

我得到了上面的类,我想要另一个具有所有字段但为布尔类型的类。

public class CoreThreshold
{
    public bool Temperature { get; private set; }
    public bool Load { get; private set; }
    public bool Clock { get; private set; }
...

我这样做的方式是像上面那样硬编码,想知道是否有更好的方法。

我想让它可以 OOP 访问,而不是使用获取字符串并返回值的方法。 也不能像布尔值一样将浮点值设为 1 或 0(实际类型不是浮点数)。

可以做到吗,或者唯一的选择是对两个类的每个细节进行硬编码?

【问题讨论】:

  • 要查找的术语是泛型。
  • 您是想避免编写属性声明还是所讨论的类之间存在任何其他关系?
  • @AluanHaddad 是的,在提到泛型之后我意识到它们可能不是这里的正确工具(我们不想最终写出像类 TooGeneric具有类型为 S、T、U 的公共字段 X、Y、Z)。
  • @TobiasKildetoft 是的,这是一个棘手的问题。我的一部分认为这是对继承的不当使用,但我的一部分发现能够以这种方式在 TypeScript 等语言中创建类型非常有用。再说一次,在 TypeScript 中,它只是有用的,因为结构类型在这里不适用。
  • 除非你的例子很糟糕,否则这似乎是对面向对象编程的严重违反。一个名为Temperature 的属性在每个类中都应该相同。

标签: c# class oop


【解决方案1】:

我不知道这是否会如你所愿,但我会在黑暗中试一试。

您可以有一个支持Generic 的基类。例如:

public abstract class BaseCore<T>
{
    public T Temperature { get; protected set; }
    public T Load { get; protected set; }
    public T Clock { get; protected set; }
}

然后基于它派生一些类:

public class Core : BaseCore<float>
{
}

public class CoreThreshold : BaseCore<bool>
{
}

所以,您所要做的就是向BaseCore 添加另一个属性,所有派生类都会自动获取它。您不必复制代码。

【讨论】:

  • 好吧,我现在觉得很笨,因为我知道泛型,但谢谢你的帮助。
猜你喜欢
  • 2013-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-24
  • 2023-02-14
  • 1970-01-01
  • 1970-01-01
  • 2022-08-19
相关资源
最近更新 更多