我收到以下错误:
错误CS0311类型'ConsoleApp1.Diesel'不能用作通用类型或方法'Car'中的类型参数'T'。没有从'ConsoleApp1.Diesel'到'ConsoleApp1.Fuel'的隐式引用转换。 ConsoleApp1
为什么不能使用通用和接口进行约束?
module circuit1 (A, B, C, D, E, F);
input A, B, C, D, E;
output F;
wire w1, w2, w3, w4, w5;
nand G1 (w1, A, B);
or G2 (w2, C, D);
nor G3 (w3, E, C);
nor G4 (w4, w1, w2);
nand G5 (w5, w2, w3);
xor G6 (F, w4, w5);
endmodule
答案 0 :(得分:1)
您已经用Car<T>
语句约束了where
类,该语句说T必须为Fuel
或IVehicle
。 Diesel
类既不是Fuel
也不是IVehicle
,这会导致您的编译器错误。
我想您想让Diesel
成为Fuel
,在这种情况下,您可以这样定义它:
public class Diesel : Fuel { }
应该使您的代码编译正常。
答案 1 :(得分:1)
首先,您的类Diesel
需要继承自Fuel
:
public class Diesel : Fuel { }
接下来,您的Engine<F>
应该有一个约束,其中F
是Fuel
的某种类型:
public class Engine<F> where F : Fuel
{
public void Start()
{ }
private void TransformFuelToEnergy()
{ }
}
最后,您的Car<T>
应该实现IVehicle
并包含Fuel
的约束:
public class Car<T> : IVehicle where T : Fuel
{
private Engine<T> engine = new Engine<T>();
public void StartEngine()
{
engine.Start();
}
}
您的Car<T>
类然后提供StartEngine
方法来满足该接口,该方法对私有变量Engine<T>
(需要初始化)起作用。
答案 2 :(得分:0)
使用时
其中T:燃料,车辆
这需要您传入的类从抽象类和接口中实现。
public class Diesel : Fuel, IVehicle
{
public void StartEngine()
{
throw new NotImplementedException();
}
}