从类和Interface或Abstract类继承时,隐藏其他类的方法

本文关键字:隐藏 其他 方法 继承 Interface Abstract | 更新日期: 2023-09-27 17:59:07

为了改进进一步的实现,提供一些指导方针,并在项目中尽可能保持所有内容的通用性,我创建了一个接口,其中包含了一些应该使用的方法。然而,对于调用该类的用户来说,该类的一个方法应该是可见的,所以我希望它们是受保护的。E.g

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

尽管ClassOne有4个方法,但有3个方法只在一个公共类中使用,因此是私有的或受保护的。然而,这3种方法是使第4种方法发挥作用所必需的(在理想的世界中,其他开发人员也会遵循相同的原则)。所以我不想看到intellisense上弹出以下内容:

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

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

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

然而,当在ClassOne中调用上述方法时,我想防止所有的强制转换,因为这只是我的眼中钉。我喜欢我的代码干净,但这对我来说一点也不干净。我想到了一个抽象类,但我的类是从另一个类继承的。有了这个接口,我就可以做了

public ClassOne : ClassTwo, IInterface<Type1,Type2>

当我对抽象类执行此操作时,VisualStudio说需要一个接口。任何见解都是最受欢迎和赞赏的,因为我想通过让我和其他开发人员的生活更轻松来提升我的代码,他们必须使用我的代码。

提前感谢!

编辑:场景是可以有几个像ClassOne这样的类,它们本质上是一样的,但它们使用不同的类型,因为它们必须返回的对象具有不同的值。然而,这些物体的堆积或多或少是相同的,例如:

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

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

编辑2:我知道接口只提供公共方法,这就是为什么我正在寻找替代方案,因此提出了这个问题。我知道它出了什么问题,只是我真的不知道如何才能得到我想要的样子。谢谢你到目前为止的回复!

编辑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();
    }

从类和Interface或Abstract类继承时,隐藏其他类的方法

其他三个方法应该只在公共方法内调用,或者将第一个方法设为private/protected,并在一个公共方法内全部调用4个方法。

接口的全部目的是隐藏对您来说有问题的东西——调用方不需要知道的其他三个方法。

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