如果我正在创建.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();
}
}
我目前正在开发一个项目,该项目将具有一些我希望用户能够继承的抽象类,但是我只希望公开某些功能。
提前致谢。
最佳答案
不可以,使用相同的名称空间不会影响数据封装,也不会影响可见性(私有/受保护/内部)。命名空间是C#中的语法糖,实际的类名称由命名空间,名称和程序集标识组成。
因此,在您的特殊情况下,添加全名MyDLL.TheirClass{TheirAssembly}
的类将不会使MyDLL.MyClass{MyDLL}
在TheirClass
中可见(因为您的类是内部类,而新类来自其他未在程序集中标记为InternalsVisibleTo
的程序集)。