是否可以使用命名空间 (.Net) 中断封装/数据隐藏

本文关键字:封装 中断 数据 隐藏 Net 可以使 命名空间 是否 | 更新日期: 2023-09-27 18:31:26

如果我正在制作一个.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();
    }
}

我目前正在开发一个项目,该项目将有一些抽象类,我希望用户能够继承,但我只想公开某些功能。

提前谢谢。

是否可以使用命名空间 (.Net) 中断封装/数据隐藏

不,使用相同的命名空间对数据封装没有影响,对可见性(私有/受保护/内部)也没有任何影响。命名空间是 C# 中的语法糖,实际类名由命名空间、名称和程序集标识组成。

因此,在您的特定情况下,添加具有全名的类MyDLL.TheirClass{TheirAssembly}将不会使MyDLL.MyClass{MyDLL}TheirClass中可见(因为您的类是内部类,而新类来自程序集中未标记为InternalsVisibleTo的其他程序集)。