从 class 和接口或抽象 class 继承时隐藏其他 classes 的方法

Hiding methods from other classes when inheriting from a class and Interface or Abstract class

为了改进进一步的实施并提供一些指导方针并使项目中的所有内容尽可能通用,我创建了一个接口,其中包含一些应该使用的方法。但是,调用 class 的用户只能看到此 class 的一种方法,因此我希望它们属于受保护的类型。例如

public class ClassThree
{
    public ClassThree()
    {
        var classOne = new ClassOne();
        class1.MethodOne();
    }
}

尽管 ClassOne 有 4 个方法,但 3 个方法仅在一个 public class 中使用,因此是私有的或受保护的。然而,这 3 种方法是使第 4 种方法起作用所必需的(在理想情况下,其他开发人员会遵循相同的原则)。所以我不想在 intellisense 上看到以下弹出信息:

class1.MethodTwo();
class1.MethodThree();
class1.MethodFour();

我知道可以从接口隐式调用方法,例如

IInterface.MethodTwo<Type,Type>(string name)
{
  //Do stuff here
}

但是我想在 ClassOne 本身中调用所述方法时阻止所有转换,因为这只是我眼中的刺。我喜欢我的代码干净,这对我来说一点也不干净。我想到了一个抽象 class 但是我的 class 是从另一个 class 继承的。使用界面我可以做到

public ClassOne : ClassTwo, IInterface<Type1,Type2>

当我使用抽象 class 执行此操作时,但是 Visual Studio 表示需要一个接口。任何见解都非常受欢迎和赞赏,因为我希望通过让我和必须使用我的代码的开发人员的生活更轻松来提升我的代码。

提前致谢!

编辑:场景是可以有多个像 ClassOne 这样的 classes,它们基本上做同样的事情,但是它们使用不同的类型,因为它们必须 return 持有不同的值。然而,这些对象的构建或多或少是相同的,例如:

  1. 收集所有 API 数据
  2. 检索要导出到 API 的列表并根据类型调用 #3 或 #4。
  3. 将类型 1 导出到 API
  4. 将类型 2 导出到 API

想法总是相同的,但自然不同API需要不同的变量。但是为了确保像以前一样遵循所有步骤,我想实现一个接口或其他东西,但是步骤 1,2 和 3 应该是私有的或受保护的,并且只有步骤 2 应该对使用它的 class 可用。但是,如果我只将方法 2 放在接口中,我永远无法确定其他人会实现 1,3 和 4。这就是这里的目标 :P。这同时 ClassOne 还继承自另一个 class 而不仅仅是接口。

编辑 2:我知道接口只提供 public 方法,这就是为什么我正在寻找替代方法因此这个问题。我知道它有什么问题我只是不明白我如何才能按照我希望的方式得到它。感谢到目前为止的回复!

编辑 3:界面目前看起来像这样,我只是为了示例调整了变量名称。

   public interface IExport<in T, in TU>
    {
        void GetRequiredApiData();

        bool MethodOne(List<Type> list);

        bool ExportOne(T one);

        bool ExportTwo(TU two);

        bool ValidateExport();
    }

其他三个方法应该只在您的 public 方法中调用,或者使您的第一个方法 private/protected 并在一个 public 方法中调用所有 4 个方法。

接口的全部意义在于准确隐藏对你来说有问题的东西——调用者不需要知道的其他三种方法。

我怀疑您需要在不同的特定时间以特定顺序调用这三种方法。如果是这种情况,那么您就有代码味道了。这些方法可能只是具有副作用并改变全局状态的无效子例程。代码需要重构,不只是一系列子程序,对象需要以不同方式分解。