C# 如何使这个结构更智能

C# 如何使这个结构更智能,c#,.net,C#,.net,我有一个属于类的结构 public struct PartStruct { public string name; public string filename; public string layer2D; public string layer3D; public TypeOfPart type; public int hight; public int depth;

我有一个属于类的结构

  public struct PartStruct
    {
        public string name;
        public string filename;
        public string layer2D;
        public string layer3D;
        public TypeOfPart type;
        public int hight;
        public int depth;
        public int length;
        public int flooroffset;
        public int width;
        public int cellingoffset;
    }
此结构的每个实例将表示具有不同属性的零件,我只使用一种结构类型,因为我有以下函数:

public void insert(Partstruct part){//large code to insert the part}
例如:

Partstruct monitor = new Partstruct();
monitor.name = "mon1";
monitor.file = "default monitor file name.jpg";//this is a const for each new monitor
monitor.TypeofPart = monitor;
monitor.layer2d = "default monitor layer";//this will be the same for each new monitor.
等等

等等


我能用更聪明的方式来做吗?我正在使用.NET3.5,在我看来,在这种情况下,您可能会从某种继承中受益。由于part是一种通用类型,并且您有更具体的类型,例如Monitor和Keyboard,因此它是继承的完美示例。所以它看起来像这样:

public class Part
{
    public virtual string Name { get { return "not specified"; } }
    public virtual string FileName { get { return "not specified"; } }
    public virtual string Layer2D { get { return "not specified"; } }
    public virtual string Layer3D { get { return "not specified"; } }
    ...
}

public class Monitor : Part
{
    public override FileName { get { return "default monitor"; } }
    public override Layer2D { get { return "default monitor layer"; }}
    ...
}


您会发现很多关于继承的资源,我强烈建议您查看它们,因为它们将显著提高您的生产力和效率。这里有一个例子:

在我看来,在这种情况下,您可以从某种继承中获益。由于part是一种通用类型,并且您有更具体的类型,例如Monitor和Keyboard,因此它是继承的完美示例。所以它看起来像这样:

public class Part
{
    public virtual string Name { get { return "not specified"; } }
    public virtual string FileName { get { return "not specified"; } }
    public virtual string Layer2D { get { return "not specified"; } }
    public virtual string Layer3D { get { return "not specified"; } }
    ...
}

public class Monitor : Part
{
    public override FileName { get { return "default monitor"; } }
    public override Layer2D { get { return "default monitor layer"; }}
    ...
}


您会发现很多关于继承的资源,我强烈建议您查看它们,因为它们将显著提高您的生产力和效率。这里有一个例子:

基类型和继承或接口类型如何?很难理解你想要实现什么-你能在插入后对你正在做的事情和你希望对函数/列表做的事情多加评论吗?你想过创建一个类吗?顺便问一下,你为什么用结构而不是类呢?在这种情况下,一个更智能的结构应该是一个类。@DJKRAZE和Tim我可以使用一个类,没有问题,但我不需要这种类型的任何函数。但它将如何帮助我用不同的变量创建不同的对象。而且变量更少。“智能”是否包括正确的拼写?“高度”应为“高度”,“天花板偏移”应为“天花板偏移”。此外,您的套管不一致:“layer2d”和“layer2d”。方法名通常是Pascal大小写,即“Insert”而不是“Insert”。那么基类型和继承或接口类型呢?很难理解你想要实现什么-你能在插入后对你正在做的事情和你希望对函数/列表做的事情多加评论吗?你想过创建一个类吗?顺便问一下,你为什么用结构而不是类呢?在这种情况下,一个更智能的结构应该是一个类。@DJKRAZE和Tim我可以使用一个类,没有问题,但我不需要这种类型的任何函数。但它将如何帮助我用不同的变量创建不同的对象。而且变量更少。“智能”是否包括正确的拼写?“高度”应为“高度”,“天花板偏移”应为“天花板偏移”。此外,您的套管不一致:“layer2d”和“layer2d”。方法名通常是Pascal大小写,即“Insert”而不是“Insert”。简单地说,继承是一种方法,由于struct不支持这种方法,类是一种方法。是的。结构应该只用于只包含几个字段的不可变类型,否则复制对象会非常昂贵。另一种选择是让产品为不同的方面实现不同的接口,如
IPart
IWarranty
iServicable
。让我先说一句,继承是一种方法,因为struct不支持这样的接口,类是一种方法。是的。结构应该只用于只包含几个字段的不可变类型,否则复制对象会非常昂贵。另一种选择是让产品为不同方面实现不同的接口,如
IPart
IWarranty
iServicable
public class Part
{
    public virtual string Name { get { return "not specified"; } }
    public virtual string FileName { get { return "not specified"; } }
    public virtual string Layer2D { get { return "not specified"; } }
    public virtual string Layer3D { get { return "not specified"; } }
    ...
}

public class Monitor : Part
{
    public override FileName { get { return "default monitor"; } }
    public override Layer2D { get { return "default monitor layer"; }}
    ...
}
public class Keyboard : Part
{
    public override FileName { get { return "default keyboard filename.jpg"; } }
    public override Layer2D { get { return "default keyboard 2d layer"; }}
    ...
}