c# - 如何制作内部界面图案?

标签 c# .net interface internal

我有许多类(具有不同的基类等),它们共享一个接口(interface)。

public interface IObjectWithSector
{
   Sector Sector {get;}
}

但是,我的 Sector 基类(在与接口(interface)和所有实现基类相同的程序集中定义)有一个 public void AddObject(IObjectWithSector obj); 方法,其中包括必须包含 obj.Sector = this; 指令。这提出了一个问题。如果我在接口(interface)中公开 setter,所有消费者类都将能够设置 Sector,从而能够绕过我的 AddObject 方法内的逻辑。但如果我将其保留在公共(public)界面之外,即使 Sector 也看不到 setter 。我正在考虑“内部接口(interface)”,但这些东西并不好,因为我无法从它们继承公共(public)接口(interface),所以无论如何它都会是交叉转换。

最好的模式是什么?

最佳答案

不提供接口(interface),而是提供具有内部 setter 属性的基类。所有消费者都必须从该类派生。

您不能强制客户以某种方式实现只有您的程序集才能看到的东西。从客户的角度来看,这没有多大意义。如果他们需要实现您的 setter,他们也可以调用它。毕竟,这是他们的程序集中的代码。

但是,基类实现是由您自己提供的,因此可以具有内部成员。客户可以扩展它,但你可以保证内部的东西在那里,而且只有你可以看到它。

关于c# - 如何制作内部界面图案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6335981/

相关文章:

c# - 用于为 Web 应用程序实现文档编辑和查看功能的 API?

c# - 在不创建 HTML 文件的情况下打印 HTML 字符串?

c# - 使用 C# 从 Mettler Toledo 秤设备读取数据

c# - 您在依赖项中寻找什么来确定它是否应该是一个注入(inject)的依赖项?

c# - 在 C# 中测试值是否为数字的正确方法

c# - 如何停止或终止异步委托(delegate)?

c# - 两个实体之间的代码优先外键

go - 你如何在golang中返回一个非原始类型的变量

java - 在接口(interface)中使用默认方法是否违反了接口(interface)隔离原则?

Java 接口(interface)反射替代方案