如果我正在制作 .Net dll,是否可以通过创建具有相同命名空间的类来打破任何使用它的程序中的封装?
例如,考虑一个包含以下代码的 DLL:
using System;
namespace MyDLL
{
internal class MyClass
{
internal void Stuff()
{
...
}
}
}
如果我随后创建一个项目并引用 DLL,我是否能够执行如下操作?
using System;
using MyDLL;
namespace MyDLL
{
public class TheirClass
{
MyClass exposedClass = new MyClass();
exposedClass.Stuff();
}
}
我目前正在开发一个项目,该项目将有一些我希望用户能够继承的抽象类,但我只想公开某些功能。
提前致谢。
最佳答案
不会,使用相同的命名空间不会影响数据封装,也不会影响可见性(私有(private)/ protected /内部)。命名空间是C#中的语法糖,实际的类名由命名空间、名称和程序集标识组成。
因此,在您的特定情况下,添加全名 MyDLL.TheirClass{TheirAssembly}
的类不会使 MyDLL.MyClass{MyDLL}
从 TheirClass
可见code> (因为您的类是内部类,并且新类来自其他程序集,未在程序集中标记为 InternalsVisibleTo
)。
关于c# - 我可以打破命名空间的封装/数据隐藏吗(.Net),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18797359/