gpt4 book ai didi

c# - c#中子命名空间的封装

转载 作者:行者123 更新时间:2023-11-30 18:00:27 26 4
gpt4 key购买 nike

我有一个类库项目。在这个项目中,我有一些文件夹来分隔逻辑。

假设我有一个 DAL 库,在 DAL 中我有 IDALDALFactorySQLServerDAL。< br/>现在,当我将 DAL dll 提供给其他程序员时,他可以使用所有的 subDll。假设我不希望他使用 SQLServerDal,而是其他人。我如何封装SQLServerDAL,让任何人都察觉不到它的存在。

谢谢。
编辑:
更具体地说:

using DAL; // it can be written
using DAL.IDAL; // it can be written
using DAL.DALFactory; // it can be written
using DAL.SQLServerDAL; // it dont want to allow anyone write that

最佳答案

这对命名空间来说是不可能的,因为它们不存在于元数据级别。按照其他人的建议,将命名空间 SQLServerDAL 中的所有类都设置为内部类,或者将 SQLServerDAL 设置为静态内部类而不是命名空间。在这种方法中,SQLServerDAL 内部的类将成为嵌套类,并且无法从 DAL 程序集外部访问:

// what you have now:
namespace DAL.SQLServerDal
{
public class A {}
public class B {}
}

// in other assembly
using DAL.SQLServerDal ; // ok
new A () ; // ok

// with internal classes:
namespace DAL.SQLServerDal
{
internal class A {}
internal class B {}
}

// in other assembly
using DAL.SQLServerDal ; // ok
new A () ; // error: A is inaccessible due to protection level

// what I propose:
namespace DAL
{
internal static class SQLServerDal
{
public class A {}
public class B {}
}
}

// in other assembly
using DAL.SQLServerDal ; // error: namespace DAL.SQLServerDal does not exist

但是,如果您使用反射或代码生成,如果您使用的库不正确支持嵌套类,您可能会遇到问题。

关于c# - c#中子命名空间的封装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10104444/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com