【问题标题】:Can I break encapsulation/data hiding with namespaces (.Net)我可以用命名空间(.Net)打破封装/数据隐藏吗
【发布时间】:2013-09-14 01:16:59
【问题描述】:

如果我正在制作 .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# .net mono namespaces encapsulation


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢,这已经回答了我的问题
    猜你喜欢
    • 2017-02-05
    • 1970-01-01
    • 2013-09-29
    • 2012-05-31
    • 2018-06-29
    • 1970-01-01
    • 2015-05-28
    • 2010-11-12
    • 1970-01-01
    相关资源
    最近更新 更多