【问题标题】:Can we have multiple (more than two) partial classes in c#? [duplicate]我们可以在 c# 中有多个(超过两个)部分类吗? [复制]
【发布时间】:2019-10-26 12:43:06
【问题描述】:

假设团队中有 3 名成员,他们都想在同一个班级工作。那么在这种情况下,我们可以在 c# 中使用超过 2 个局部类吗?

【问题讨论】:

  • 那就是通过创造更多问题来解决问题。部分类充其量也是不确定的,并且是主要的代码气味。我建议使用 git 或一些可靠的版本控制
  • 发布这个问题比尝试它更容易吗?老实说,这需要 30 秒。
  • 与部分类无关,但仍与您的问题上下文相关 - 有一个名为 Visual Studio Live Share 的实时代码协作工具。我还没有尝试过,但可能值得一试。
  • @TheGeneral 当我需要实现多个接口时,我有时会使用部分类,每个接口一个。我觉得这是一种将方法分组的简单方法。
  • @Magnus 确实有合法的用例,但是我的观点(和观点)是多开发人员访问不是其中之一,它只是在问问题。它为错误的工作使用了错误的工具(使用语言功能作为生产力工具,可能会引入细微的错误、损坏的代码、重复、臃肿,并且完全不需要版本控制系统。看起来这可能是一部分自第一版以来的文档完全可疑(注意不是针对您的焦虑)

标签: c# partial-classes


【解决方案1】:

是的,您可以创建超过 2 个Partial classes。 (来源Here

根据文档:

在处理大型项目时,将一个类分布在不同的文件中可以让多个程序员同时处理它。

工作示例

using System;

public class Program
{
    public static void Main()
    {
        Foo foo = new Foo();
        foo.PrintMessage1();
        foo.PrintMessage2();
        foo.PrintMessage3();
    }
}

public partial class Foo
{
    public void PrintMessage1()
    {
        Console.WriteLine("Foo1");
    }  
}

public partial class Foo
{
    public void PrintMessage2()
    {
        Console.WriteLine("Foo2");
    }
}

public partial class Foo
{
    public void PrintMessage3()
    {
        Console.WriteLine("Foo3");
    }
}

【讨论】:

  • 我很惊讶文档说它是部分类历史上最糟糕的用例
  • IMO 部分类最好在涉及自动代码生成时使用。正如@TheGeneral 提到的,这是最糟糕的用例。
  • @TheGeneral 你能否提供一个链接来展示多个程序员同时使用同一个类的缺点和陷阱?
  • @TheodorZoulias Partial classes 可能在运行时包含冲突。
【解决方案2】:

我不会引入部分类,以便能够与其他开发人员合作。一个好的做法是使用某种版本控制,例如GitTortoiseSVNTFVC。仅举几例。

版本控制服务于多个purposes

  • 帮助您进行协作。例如。具有合并功能。
  • 存储您的版本(非常明显)
  • 恢复旧版本和快照(也称为提交)
  • 跟踪您的更改。查看文件历史记录,看看谁编写了哪些代码。
  • 备份

另外请注意,任何版本控制都极大地受益于合并工具。这些用于将多个文件版本(通常由不同的开发人员提交)合并到一个文件中。在版本控制中通常称为解决merge-conflicts

快速进入版本控制

为了让您快速入门,不妨尝试以下组合:

使用 GitExtensions 作为 git 版本控制的图形界面。使用 Meld 解决合并冲突。


总结

在软件开发中使用版本控制是一个主要的最佳实践,它极大地有助于项目管理、敏捷性、协作和文档编制。

老实说,我从来没有在任何地方工作过,我们没有使用过这个,我也不知道有谁没有使用过。因此,即使我不了解 OP 的背景,我仍然建议尝试一下。

另外:即使是协作之王 - 开发人员在大型开源项目上一起工作,也使用版本控制。主要是 git。

【讨论】:

  • 这不是问题的真正答案,而是一个很好的解释为什么不使用该工作流程。不确定是否+1 ...嗯,给你;p
  • @nilsK 非常感谢。无论如何,根据这个meta post don't do this 是一个有效的答案:)
猜你喜欢
  • 1970-01-01
  • 2017-10-04
  • 1970-01-01
  • 1970-01-01
  • 2012-09-11
  • 2020-11-07
  • 2016-07-03
  • 1970-01-01
  • 2018-10-04
相关资源
最近更新 更多