【问题标题】:base class with abstract method returning T具有返回 T 的抽象方法的基类
【发布时间】:2017-11-18 07:40:46
【问题描述】:

我正在定义一个基类,它有一个返回类型 T 的方法。由此派生的类可以返回不同的类型。

public abstract class BaseTransport
{
    public abstract T Properties<T>();
}

public class Car : BaseTransport
{
    public override T Properties<T>()
    {
       return new CarProperties();
    }
}

public class Bike : BaseTransport
{
    public override T Properties<T>()
    {
       return new BikeProperties();
    }
}

如果有所不同,则返回的 BikeProperties 和 CarProperties 都派生自 BaseProperties。

这可能吗?只是试图强制执行一个方法...

【问题讨论】:

  • 如果有人打电话给car.Properties&lt;String&gt;();怎么办?
  • 我明白你想要做什么,Generic 不能这样工作。如果没有使用 CarBike 的示例,则无法回答这个问题。
  • CarBike 中重命名类型参数也无济于事。 C# 区分大小写:tT 是完全不同的标识符。听起来您需要使 class 通用,而不是使 method 通用。
  • @JonSkeet 对不起,t 应该是 T,它已经被 Erik 编辑过

标签: c#


【解决方案1】:

你不想要泛型方法,你想要一个泛型类:

public abstract class BaseTransport<T> where T : BaseProperties
{
    public abstract T Properties();
}

public class Car : BaseTransport<CarProperties>
{
    public override CarProperties Properties()
    {
       return new CarProperties();
    }
}

public class Bike : BaseTransport<BikeProperties>
{
    public override BikeProperties Properties()
    {
       return new BikeProperties();
    }
}

【讨论】:

  • 我会在查看链接响应后查看此内容。属性只是区别之一,您的示例与属性配合良好,但更复杂的示例可能会出现在管道中。
  • @ginalster 听起来你这里有 X-Y 问题。
  • 公共抽象类 BaseTransport 其中 T:BaseProperties 更好。
  • 这就是我最终要做的。谢谢
猜你喜欢
  • 2013-04-16
  • 2021-12-15
  • 2014-04-03
  • 2020-03-12
  • 2010-12-13
  • 1970-01-01
  • 2011-04-12
  • 1970-01-01
  • 2014-08-14
相关资源
最近更新 更多