C# 类型参数约束-无泛型(或最近的报价!)
我想我想做的事是不可能的,但我想我还是会问的。我正在考虑在不同的公制度量之间实现某种自定义转换,例如将英寸转换为米和其他单位 我认为基类称为Unit,如下所示。注:我没有在任何字段中输入单位数,例如2米、5英寸等:C# 类型参数约束-无泛型(或最近的报价!),c#,parameters,constraints,C#,Parameters,Constraints,我想我想做的事是不可能的,但我想我还是会问的。我正在考虑在不同的公制度量之间实现某种自定义转换,例如将英寸转换为米和其他单位 我认为基类称为Unit,如下所示。注:我没有在任何字段中输入单位数,例如2米、5英寸等: public abstract class Unit { protected string _name; public Unit(string name) { _name = name; } } 然后,米和英寸单位的子类: publi
public abstract class Unit {
protected string _name;
public Unit(string name)
{
_name = name;
}
}
然后,米和英寸单位的子类:
public class Metre : Unit {
public Metre() : base("Metre")
{
}
}
public class Inch : Unit {
public Metre() : base("Inch")
{
}
}
我希望有一个类可以处理这些单位之间的转换。比如:
public static class UnitConvertor
{
public Unit Convert(Unit from, Type to) : where Type extends/inherits from Unit
{
// do the conversion
return the instance of Type to;
}
}
有什么想法吗?如果单位都提前知道,您可以使用:
Convert(T from,T to)其中T:Unit可能是合适的解决方案。vcsjones-您是指Convert(engineeringingunit from,T to)其中T:Unit吗?您需要传递一个T的实例——即一个新的Meter作为第二个参数——理想情况下,您不希望调用方实例化返回类型。你只想说,这是一个英寸的例子,给我一个米当量。除非有一个可行的泛型解决方案。我看了又看,但没有看到任何合适的。请随意分享我可能错过的任何信息。是的-如果你想添加一个新单元,你必须更新各个类,不要说它很漂亮;-)是的,会有很多单位。我把2放在例子中讨论,但有点像这个例子。一个“解决办法”可能是所有单位都可以转换为米,米可以转换为所有其他单位-kludgy,但可以在converter类中使用它来绕过N*N转换。
public class Metre : Unit
{
public Metre() : base("Metre")
{
}
public static implicit operator Inch(Metre m)
{
return new Inch(39.37 * m.Value);
}
}