我很难找到下面问题的答案,关于继承和OOP。有人可以帮忙吗?
以下是问题:
假设我在名为ServiceManager
的程序集中有一个名为 KioskFramework
的类,它实现了2个名为 IServiceManager
和 IServiceProvider
。
public interface IServiceManager
{
string SerialNumber { get; }
string Description { get; set; }
int DoFoo(IServiceManager instance, int a, int b);
}
public interface IServiceProvider
{
void DoSomethingRESTRICTED();
}
class ServiceManager : IServiceManager, IServiceProvider
{
public void DoSomethingRESTRICTED();
… // some other properties and methods...
public string SerialNumber { get { … } }
public string Description { get { … } set { … } }
public int DoFoo(int a, int b)
{
…
}
}
我在名为MonitoringService
的程序集中有另一个名为 KioskFramework.MonitoringService
的类,它使用ServiceManager
类的某些属性(IServiceManager
类中定义的属性{1}})。
class MonitoringService
{
… // some other properties and methods...
public int DoBar(IServiceManager instance, int a, int b)
{
// an example to show that I need access to ServiceManager's properties
return instance.SerialNumber.Length +
instance.Description.Length +
instance.DooFoo(a, b);
}
}
我想要做的就是,我希望能够在MonitoringService
中使用某些属性,但没有其他类或程序集(例如ControllingService
内的KioskFramework.ControllingService
),可以访问该属性。
class ControllingService
{
public void DoSomethingElse(IServiceProvider instance)
{
// this method should not have access to the IServiceManager's
// properties and methods, even if it has an instance of
// IServiceProvider, or even if it has referenced the assembly
// containing IServiceManager interface
}
}
有可能吗?怎么样?有解决方案的设计模式吗?
也许我以错误的方式或方式思考,但我的目标是限制某个类的某些成员只能在某些程序集中看到/使用而不是全部。
编辑:在Mark Cidade回答之后,我编辑了这篇文章,说我不想将其他内部成员和“KioskFramework”程序集类暴露给“KioskFramework.MonitoringService”程序集。
提前致谢。
答案 0 :(得分:4)
您可以将界面标记为internal
并将InternalsVisibleTo
属性应用于程序集:
来自KioskFramework.dll:
[assembly:InternalsVisibleTo("KioskFramework.MonitoringService")]
答案 1 :(得分:0)
我不确定你的目标是什么 - 所以一些一般指示:
您可以创建这些接口internal
并定义允许哪个程序集查看这些成员assembly: InternalsVisibleTo
您可以制作成员protected
并通过反映