c# - 我可以打破命名空间的封装/数据隐藏吗(.Net)

标签 c# .net mono namespaces encapsulation

如果我正在制作 .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/

相关文章:

c# - Mono for Android 库中的 Resources 文件夹

c# - 如何使用 LINQ 和 C# 更新带有列表的元素

c# - Mono.Cecil TypeReference 类型?

wpf - 如何实现一个多平台的多媒体应用?

c# - 从静态类调用方法,传递带有泛型的动态变量类型

mono - 运行 MonoTouch 应用程序时出现 SIGABRT 错误

c# - 自动生成的 XAML.g.cs 文件在 Xamarin Forms PCL 项目中不可编译

c# - 使用文件夹结构和 XML 文件在 NUnit 中动态生成测试夹具和测试用例

c# - 在 2 个 .NET 程序集中使用相同名称和命名空间的类型

.net - 如何重新启动/重用重复任务?