【发布时间】:2015-06-23 16:12:23
【问题描述】:
为了改进进一步的实施并提供一些指导方针并在项目中尽可能保持通用性,我创建了一个接口,其中包含一些应该使用的方法。但是,调用该类的用户应该只能看到此类的一种方法,因此我希望它们属于受保护的种类。例如
public class ClassThree
{
public ClassThree()
{
var classOne = new ClassOne();
class1.MethodOne();
}
}
尽管 ClassOne 有 4 个方法,但 3 个方法仅在一个公共类中使用,因此是私有的或受保护的。然而,这 3 种方法是使第 4 种方法起作用所必需的(在理想情况下,其他开发人员会遵循相同的原则)。所以我不想在智能感知上看到以下弹出:
class1.MethodTwo();
class1.MethodThree();
class1.MethodFour();
我知道可以从接口隐式调用方法,例如
IInterface.MethodTwo<Type,Type>(string name)
{
//Do stuff here
}
但是,我想在 ClassOne 本身中调用所述方法时阻止所有强制转换,因为这只是我眼中的一根刺。我喜欢我的代码干净,这对我来说根本不干净。我想到了一个抽象类,但是我的类是从另一个类继承的。有了界面我就可以做
public ClassOne : ClassTwo, IInterface<Type1,Type2>
当我使用抽象类执行此操作时,Visual Studio 说需要一个接口。任何见解都非常受欢迎和赞赏,因为我希望通过让我和必须使用我的代码的其他开发人员的生活更轻松来提升我的代码。
提前致谢!
编辑:场景是可以有几个类,如 ClassOne,它们基本上做同样的事情,但是它们使用不同的类型,因为它们必须返回的对象持有不同的值。然而,这些对象的构建或多或少是相同的,例如:
- 收集所有 API 数据
- 检索要导出到 API 的列表并根据类型调用 #3 或 #4。
- 将类型 1 导出到 API
- 将类型 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();
}
【问题讨论】:
-
有点难以理解你在说什么。您在第一段中谈论的是一个界面,但这不知何故变成了一个类中间句。这个类(我猜是
ClassOne)有一些你想隐藏在消费代码中的方法。您能否详细说明为什么将成员设为私有或受保护不起作用?另外,ClassThree是什么?那是消费代码吗? -
添加了额外的解释,希望现在更清楚!
-
接口中的所有方法都是公共的,根据设计,您只能从 1 个类继承数据(即使它是抽象的)。希望对你有帮助
-
@darkndream 我可以使用任何可能的替代方案吗?所有逻辑都在那里。调用类时只有这 3 种方法引起了我的注意
-
我会预先避免这种设计,因为重构主要由复制粘贴样板组成的 85 个对象确实很困难。但是,要完成您想要的工作,不要使用此对象来完成所有工作,而是在此对象上保留一个公共方法,并让它调用您创建的另一个对象上的 4 个方法,该对象利用抽象类来定义受保护的方法.
标签: c# interface logic abstract-class object-oriented-analysis