C# - 声明常量字段,但用接口组织?

时间:2016-10-10 09:32:40

标签: c#

对于几种类型的“建筑物”,我有一堆常数值,其大小是固定的(由于它们将保持的3D模型)。

我环顾四周,阅读了基类,接口和摘要,但无法完全掌握这些概念。但是我真的很喜欢使用接口来“组织”具有公共字段的类。在这种情况下,sizeX和sizeY是在所有构建类中共享的字段类型。

  $("td:nth-child(1)")

我是否可以通过某种方式为此实现接口,而无需在每个类中使用构造函数? (我想根据需要简单地调用这些常量,如下所示:)

public static class BuildingProperties {

public class House
{
    public const int sizeX = 4;
    public const int sizeY = 4;
}

public class House1
{
    public const int sizeX = 6;
    public const int sizeY = 6;
}

public class Commercial
{
    public const int sizeX = 10;
    public const int sizeY = 10;
}

}

为了将来使用,如果我需要添加另一个字段(例如“height”),我希望编译器抛出错误并说“嘿!你忘了给House1一个”高度“值!

是否有人可以指向我这样的事情?

3 个答案:

答案 0 :(得分:4)

在我看来,您的代码需要重新设计。我不明白你为什么要拥有所有这些公共子类。相反,我只会为所有建筑类型使用一个类(假设all始终具有相同的属性),并为该类的类型使用3个属性:

public class Building
{
    public Building(int sizeX, int sizeY)
    {
        SizeX = sizeX;
        SizeY = sizeY;
    }

    public int SizeX { get; }
    public int SizeY { get; }
}

public static class BuildingProperties
{

    public static Building House { get; } = new Building(4, 4);

    public static Building House1 { get; } = new Building(6, 6);

    public static Building Commercial { get; } = new Building(10, 10);

}

请注意,此代码示例中的所有属性都是不可变的,并且,如果您将来添加属性,并且希望在缺少编译器时出现编译器错误,那么您只需要更改{的构造函数{1}}类为这个新的只读属性接受另一个参数。

答案 1 :(得分:2)

您可以简单地创建一个声明2个getter属性的接口:

public interface IProvideSizes
{
    int SizeX { get; }
    int SizeY { get; }
}

在您的课程中让他们从const

返回数据
public class House : IProvideSizes
{
    public const int _sizeX = 4;
    public const int _sizeY = 4;

    public int SizeX { get { return _sizeX; } }
    public int SizeY { get { return _sizeY; } }
}

public class House1 : IProvideSizes
{
    public const int _sizeX = 6;
    public const int _sizeY = 6;

    public int SizeX { get { return _sizeX; } }
    public int SizeY { get { return _sizeY; } }
}

public class Commercial : IProvideSizes
{
    public const int _sizeX = 10;
    public const int _sizeY = 10;

    public int SizeX { get { return _sizeX; } }
    public int SizeY { get { return _sizeY; } }
}

这样,您可以保留和维护每种类型的契约,同时仍然能够以静态方式访问每种类型的特定大小(无需实例化)。

答案 2 :(得分:-1)

你考虑过字典吗?

            Dictionary<string, System.Drawing.Point> properties = new Dictionary<string, System.Drawing.Point>() {
                {"House", new System.Drawing.Point(4,4)},
                {"House1", new System.Drawing.Point(6,6)},
                {"Commercial", new System.Drawing.Point(10,10)}
            };