2

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

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

提前致谢。

4

1 回答 1

4

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

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

于 2013-09-14T01:22:52.183 回答