如何防止从命名空间内访问 class?
How to prevent access to a class from within a namespace?
如何防止在 C# 的命名空间之外使用 class?
例如,我有两个命名空间。一个定义数据模型 class,另一个定义继承第一个的数据模型 class。第二个命名空间还定义了一个实用程序 class,它是唯一被允许使用第二个数据模型 class..
的 class
namespace A
{
public class ModelA {} // can be used by any class
}
namespace B
{
class ModelB : ModelA {} // can only be used by Utility
public class Utility
{
public void DoSomething()
{
var item = new ModelB {};
...
}
}
}
通过在另一个class库或项目中实现以下代码,我想要评论中指出的效果...
namespace C
{
public class Stuff
{
public void DoThings()
{
var a = new ModelA(); // this should work
var b = new ModelB(); // this should not work
}
}
}
您不能将 private
访问修饰符添加到 class 直接包含在命名空间中的元素。
但是您可以将 ModelB
设为私有嵌套 class:
namespace A
{
class ModelA {} // can be used by any class
}
namespace B
{
class Utility
{
private class ModelB : ModelA {} // can only be used by Utility
public void DoSomething()
{
var item = new ModelB {};
...
}
}
}
这意味着,与任何其他私有 属性 一样,无法在 Utility
-class
之外访问它
如何防止在 C# 的命名空间之外使用 class?
例如,我有两个命名空间。一个定义数据模型 class,另一个定义继承第一个的数据模型 class。第二个命名空间还定义了一个实用程序 class,它是唯一被允许使用第二个数据模型 class..
的 classnamespace A
{
public class ModelA {} // can be used by any class
}
namespace B
{
class ModelB : ModelA {} // can only be used by Utility
public class Utility
{
public void DoSomething()
{
var item = new ModelB {};
...
}
}
}
通过在另一个class库或项目中实现以下代码,我想要评论中指出的效果...
namespace C
{
public class Stuff
{
public void DoThings()
{
var a = new ModelA(); // this should work
var b = new ModelB(); // this should not work
}
}
}
您不能将 private
访问修饰符添加到 class 直接包含在命名空间中的元素。
但是您可以将 ModelB
设为私有嵌套 class:
namespace A
{
class ModelA {} // can be used by any class
}
namespace B
{
class Utility
{
private class ModelB : ModelA {} // can only be used by Utility
public void DoSomething()
{
var item = new ModelB {};
...
}
}
}
这意味着,与任何其他私有 属性 一样,无法在 Utility
-class