Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我可以用名称空间(.Net)中断封装/数据隐藏吗_C#_.net_Mono_Namespaces_Encapsulation - Fatal编程技术网

C# 我可以用名称空间(.Net)中断封装/数据隐藏吗

C# 我可以用名称空间(.Net)中断封装/数据隐藏吗,c#,.net,mono,namespaces,encapsulation,C#,.net,Mono,Namespaces,Encapsulation,如果我正在创建一个.NETDLL,是否可以通过创建一个具有相同名称空间的类来破坏使用它的任何程序中的封装 例如,考虑一个具有以下代码的DLL: using System; namespace MyDLL { internal class MyClass { internal void Stuff() { ... } } } 如果我要创建一个项目,并引用DLL,我是否能够执行以下操作 using S

如果我正在创建一个.NETDLL,是否可以通过创建一个具有相同名称空间的类来破坏使用它的任何程序中的封装

例如,考虑一个具有以下代码的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的类。它们的类{TheirAssembly}
不会使
MyDLL.MyClass{MyDLL}
它们的类
可见(因为您的类是内部类,而新类来自于程序集中未标记为
InternalsVisibleTo
的其他程序集)。

否,使用相同的名称空间不会影响数据封装,也不会影响可见性(private/protected/internal)。名称空间在C#中是语法糖,实际的类名包括名称空间、名称和程序集标识


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

谢谢,这回答了我的问题谢谢,这回答了我的问题