如何将类作为类型?

时间:2017-03-13 18:02:59

标签: c# types console-application

我在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课程中,我怎样才能拥有"类型"以上两种车型?

3 个答案:

答案 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
}