为C#中的方法或构造函数提供过多的重载是不好的形式?

我正在使用C#为Unity编写代码.目前,我正在处理一些较小的类和结构,以便快速序列化随机生成的地图.在这样做时,我处理了一些构造函数,这些构造函数也将一些较小的类和结构作为参数.

在过去,我通常会在设置方法和构造函数时尝试考虑合理的选项.虽然这种做法受到了质疑,但没有人能够给我任何合理的理由,说明为什么我不应该这样做.

考虑以下类和结构:

public class Tile
{
    public GridCoordinates position;
    public TileCode prefabID;
}

public struct GridCoordinates
{
    public int x;
    public int y;
}

public struct TileCode
{
    public int categoryID;
    public int individuaID;
}

通常,在创建构造函数时,我将覆盖所有struct和int替代.瓷砖看起来像这样:

public class Tile
{
    public GridCoordinates position;
    public TileCode prefabID;

    public Tile(TileCode prefabID, GridCoordinates position)
    {
        this.prefabID = new TileCode(prefabID);
        this.position = new GridCoordinates(position);
    }

    public Tile(TileCode prefabID, int xPosition, int yPosition)
    {
        this.prefabID = new TileCode(prefabID);
        position = new GridCoordinates(xPosition, yPosition);
    }

    public Tile(int typeID, int individualID, GridCoordinates position)
    {
        prefabID = new TileCode(typeID, individualID);
        this.position = new GridCoordinates(position);
    }

    public Tile(int typeID, int individualID, int xPosition, int yPosition)
    {
        prefabID = new TileCode(typeID, individualID);
        position = new GridCoordinates(xPosition, yPosition);
    }

为了提高效率,我倾向于这样做.与第一个构造函数/方法一起编写额外的构造函数/方法需要花费大量的多余时间,并且当我后来希望以一种我原本没有使用的方式使用构造函数/方法时,我发现这有时会派上用场.预料.

以前提出的唯一问题是混淆的可能性.我觉得这不是一个真正的问题,因为我的组织和评论清楚地区分了每个变体.

最后,我担心我的老师和同事可能还有其他问题没有意识到.我目前正在寻求扩展到一个更大的项目,现在更容易改变我的行为,而不是以后纠正它.

如果我为课程提供过多的替代构造函数或方法,我会面临什么问题?

>我并不关心美学和标准问题,尽管一个好的答案可能会提到它们.我确实尝试遵循C#标准,但并非总是如此.
>我确实担心这可能造成的潜在资源需求,所以一个好的答案可能会承认这可能存在的任何问题.
>正如我所提到的,我正在为Unity写作.我知道虽然大多数C#约定都是标准的,但在Unity中运行的上下文中有一些变化.特别是,解决这个问题的奖励点,但一般来说,一个好的答案将解决使用该语言的问题.

最佳答案
您的方法存在的问题是它违反了Don’t Repeat Yourself原则(也称为“DRY”).添加将参数传递给依赖项的“便捷构造函数”会增加两个模块之间的代码耦合(特别是control coupling),这通常是应该避免的做法.

但是,有一种情况你应该更喜欢方便构造函数:当GridCoordinates和TitleCode被认为是Title的实现细节时会发生这种情况,因此不应该公开.在这种情况下,您应该只公开最后一个构造函数,并从类的公共接口中删除所有依赖GridCoordinates和TitleCode的构造函数.

转载注明原文:为C#中的方法或构造函数提供过多的重载是不好的形式? - 代码日志