【发布时间】:2018-04-19 21:50:39
【问题描述】:
(如果有人想帮助解决这个问题,我真的很难为这个问题想出一个好的标题......)
所以我在设计某些东西时遇到了问题。本质上,我有一个 A 类,它由 B 类型的对象数组组成。我只希望 A 类的接口被公开,并且希望 B 类对任何用户基本上都是隐藏的。我希望能够对类型 B 及其数据执行操作,但只能通过类 A 的接口/方法调用 B 实例的方法。棘手的部分是我想创建一个对成员执行操作的方法类型 B,但我想实现一个接口,然后有一个实现该接口的类,因为我希望我的用户能够创建他们自己的此方法的实现。我正在考虑做类似的事情:
public class A
{
B[] arr;
C c;
public A(C c)
{
arr = new B[100];
this.c = c;
}
public void method1()
{
var b = new B();
b.someMethodofb(c); // pass c to the method of b
}
private class B
{
someMethodOfb(C c)
{
}
}
}
public class C : Interface1
{
public void method(B b)
{
//interface method we have implemented
}
}
我将 B 类设为私有,因为我只希望 A 类公开可用,因此 B 类发生的任何事情都通过 A 类发生,这也是我将 B 嵌套在 A 中的原因。但是由于 B 类是私有的,我会能够将它用作我的 C 类方法的参数吗? Interface1实现的方法会影响B如何执行someMethodOfb的内部实现,这就是为什么我认为我需要将它传入才能保持B类的隐藏性质。有没有更好的方法让我设计这个并能够实现我在第一段中设定的目标?
【问题讨论】:
-
所以您希望
B是私有的,但您还想要一个将method(B b)公开给全世界的接口?这两个要求有冲突。 -
您是否遇到 X/Y 问题? meta.stackexchange.com/questions/66377/what-is-the-xy-problem .... 你能解释一下用例吗?也许你需要一种不同的方法?
-
@Charleh 它与工作有关,我不确定我能提供多少细节。本质上,我有一个类 A,其中包含一个 B 类型的数组。我还想要一个对 B 类型执行操作的方法,但我需要能够让用户实现他们自己版本的该方法。我想我可以使该方法成为 B 类型的方法,但我想限制 B 类型在世界上的暴露程度。
-
不是在接口中公开类型 B,您需要公开一个公开可接受的 API,您可以通过您控制的类型 A 的方法将其转换为类型 B。
-
短广告 =)。我自己实现了嵌套类通用场景的解决方案,这是answer
标签: c# interface inner-classes