c# -声明常量字段,但是用接口组织
本文关键字:接口 声明 常量 字段 | 更新日期: 2023-09-27 18:12:15
我为几种类型的"建筑物"设置了一堆常量值,它们的大小是固定的(由于它们将保持3D模型)。
我四处看了看,读了一些关于基类、接口和抽象的东西,但是我不能完全掌握这些概念。然而,我真的很喜欢使用接口来"组织"具有公共字段的类的想法。在本例中,sizeX和sizeY是所有构建类共享的字段类型。
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;
}
}
是否有一些方法我可以实现这个接口,而不需要在每个类的构造函数?(我想根据需要简单地调用这些常量,像这样:)
public void program()
{
int sizeX = BuildingProperties.House.sizeX;
}
为了将来使用,如果我需要添加另一个字段(例如"height"),我希望编译器抛出一个错误并说"嘿!你忘了给House1一个"高度"值!
有这样的东西可以给我指一下吗?
在我看来你的代码需要一些重新设计。我不明白为什么你想要所有这些公共子类。相反,我将只使用一个类的所有建筑类型(假设所有总是有相同的属性)和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);
}
请注意,在这个代码示例中所有的属性都是不可变的,而且,如果您将来添加一个属性,并且希望在缺少它时得到编译器错误,您所要做的就是更改Building
类的构造函数,以接受这个新的只读属性的另一个参数。
你可以简单地创建一个接口,声明两个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; } }
}
这样,你可以保留和维护每个类型的契约,同时仍然能够以静态的方式访问每个类型的特定大小(不需要实例化它)。
你考虑过字典吗?
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)}
};