不同类型的抽象
Abstractions for different types
我正在尝试为以下情况创建最佳抽象。也许有人可以提供帮助。
这就是我现在拥有的:
public class Point{
public double? Value {get;set;}
public Information DataInformation {get;set;}
}
public class RawPoint{
//just something to process, not interesting for our example
}
public interface Service{
List<Point> ProcessPoints(List<RawPoint> rawData);
}
public ConcreteService : Service{
public List<Point> ProcessPoints(List<RawPoint> rawData){
//process the points...
}
}
现在我有一个请求,我必须引入一种新的点,比如:
public class NewPointData{
public double? Point_Max {get;set;}
public double? Point_Min {get;set;}
}
public NewPoint {
public NewPointData Value { get; set;}
public Information DataInformation {get;set;}
}
我希望使用相同的 ProcessPoints() 方法获得与之前相同的 ConcreteService,而不是返回 List 我希望它 returns 一个可以通过 Point 和 NewPoint 扩展的抽象(它们之间的唯一区别是 Value 属性的数据类型)。有没有一种方法可以在不使用 typeof() 而仅通过在客户端中直接使用抽象/多态性的情况下实现这一目标?
谢谢
使用Generics:
public class Point<TValue>
{
public TValue Value { get; set; }
public Information DataInformation { get; set; }
}
然后,将您的服务接口更改为:
public interface Service
{
List<Point<TValue>> ProcessPoints<TValue>(List<RawPoint> rawData);
}
您需要在调用方法时提供泛型类型参数:
var points = _service.ProcessPoints<double?>(data);
// points is of type List<Point<double?>>
var newPoints = _service.ProcessPoints<NewPointData>(data);
// points is of type List<Point<NewPointData>>
我正在尝试为以下情况创建最佳抽象。也许有人可以提供帮助。
这就是我现在拥有的:
public class Point{
public double? Value {get;set;}
public Information DataInformation {get;set;}
}
public class RawPoint{
//just something to process, not interesting for our example
}
public interface Service{
List<Point> ProcessPoints(List<RawPoint> rawData);
}
public ConcreteService : Service{
public List<Point> ProcessPoints(List<RawPoint> rawData){
//process the points...
}
}
现在我有一个请求,我必须引入一种新的点,比如:
public class NewPointData{
public double? Point_Max {get;set;}
public double? Point_Min {get;set;}
}
public NewPoint {
public NewPointData Value { get; set;}
public Information DataInformation {get;set;}
}
我希望使用相同的 ProcessPoints() 方法获得与之前相同的 ConcreteService,而不是返回 List 我希望它 returns 一个可以通过 Point 和 NewPoint 扩展的抽象(它们之间的唯一区别是 Value 属性的数据类型)。有没有一种方法可以在不使用 typeof() 而仅通过在客户端中直接使用抽象/多态性的情况下实现这一目标?
谢谢
使用Generics:
public class Point<TValue>
{
public TValue Value { get; set; }
public Information DataInformation { get; set; }
}
然后,将您的服务接口更改为:
public interface Service
{
List<Point<TValue>> ProcessPoints<TValue>(List<RawPoint> rawData);
}
您需要在调用方法时提供泛型类型参数:
var points = _service.ProcessPoints<double?>(data);
// points is of type List<Point<double?>>
var newPoints = _service.ProcessPoints<NewPointData>(data);
// points is of type List<Point<NewPointData>>