我在C#中进行实验,我试图弄清楚如何将某些类作为类型。
场景:
我有车:
public class Car
{
public string Name { get; set; }
public Car()
{
}
public Car(string name, string type)
{
Name = name;
Type = type;
}
}
我希望这辆车有一个Type属性。 我有两种车型:
public class MonsterTruck
{
public int Lengt => 1;
}
public class SportTruck
{
public int Lengt => 3;
}
在Car
课程中,我怎样才能拥有"类型"以上两种车型?
答案 0 :(得分:2)
根据您的需要,有几种不同的方法可以解决这个问题。
您可以创建名为CarType
的枚举,并将其设为Car
的属性:
public enum CarType
{
MonsterTruck,
SportTruck
}
public class Car
{
public CarType Type {get;set;}
//Rest of your code.
}
然而,这将是学习继承的最佳时机
想象一下,如果你有一个名为MonsterTruck
的全新类继承了Car
的字段,而且还允许它以不同的方式处理事物,而不是拥有CarType属性。毕竟,它是一种不同的类型的汽车,但仍然是汽车。
示例:
public class Car
{
public int CylinderCount {get;set;}
public double GasTankSize {get;set;}
public double Weight {get;set;}
public virtual string GetFormattedWeight()
{
return $"Your car's weight is {Weight}!"
}
}
public class MonsterTruck : Car
{
public override string GetFormattedWeight()
{
return $"Your monster truck's weight is {Weight}!"
}
}
稍后当您需要辨别type
时,您只需检查班级的实际type
:
if(someInstance is MonsterTruck)
{
//this object is a MonsterTruck type
}
答案 1 :(得分:1)
在编程中有很多方法可以做到这一点。一种选择是使用继承,但我发现自己远离了继承。
在这样的事情上运行注入/策略使系统更易于维护和读取。设置它需要更多的工作,但由于能够快速扩展并测试每个组件,因此它提供了更好的解决方案。如果管理不当,使用继承层可能会非常痛苦,并且单元测试继承层永远不会有趣。必须为某些东西写一些普通设置的If / Else语句效率不高:)
我会建议注射/策略模式。
我创造了一个快速的小提琴: https://dotnetfiddle.net/26u5ck
答案 2 :(得分:0)
您可以继承Car
并使用子类中的构造函数来设置Type
。
请参阅以下代码了解更多详情:
public class MonsterTruck : Car
{
public int Lengt => 1;
public MonsterTruck()
: base(null, "MonsterTruck")
{
}
public MonsterTruck(string name)
: base(name, "MonsterTruck")
{
}
}
如果您想知道Type本身,可以按照以下步骤操作:
Car myCar = new MonsterTruck();
if(myCar is MonsterTruck)
{
// do monster truck specific process
}