继承自类和接口或抽象类

时间:2015-06-23 16:12:24

标签: c# interface logic abstract-class object-oriented-analysis

为了改进进一步的实施并提供一些指导方针并在项目中尽可能保持通用性我已经创建了一个接口,其中包含一些应该使用的方法。但是,调用该类的用户只能看到此类的一种方法,因此我希望它们属于受保护的类别。 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>

当我使用Abstract类执行此操作时,Visual Studio会说需要一个接口。任何见解都是最受欢迎和赞赏的,因为我希望通过让我的生活和那些必须使用我的代码的开发人员的生活更轻松来实现我的代码。

提前致谢!

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

  1. 收集所有API数据
  2. 检索要导出到API的列表,并根据类型调用#3或#4。
  3. 将类型1导出到API
  4. 将类型2导出到API
  5. 这个想法总是一样的,但自然不同的API需要不同的变量。但是为了确保所有步骤都像以前一样,我希望实现一个接口或类似的东西,但步骤1,2和3应该是私有的或受保护的,并且只有第2步应该可用于消耗它的类。但是,如果我只将方法2放在界面中,我就永远不能确定其他人会实施1,3&amp;这就是我们的目标: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();
        }
    

1 个答案:

答案 0 :(得分:1)

其他三种方法应该在你的公共方法中调用,或者让你的第一个方法为private / protected,并在一个公共方法中调用所有4个方法。

界面的重点是准确隐藏对您有用的问题 - 调用者不需要知道的其他三种方法。

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