c# - 使类只能由静态对象访问

标签 c# .net static-classes

我正在 .Net 中创建一个库

我有一个名为 DataManager 的静态类。

public static class NewDataManager
{
    public static Soccer Soccer { get; private set; }

    static NewDataManager()
    {
         Soccer =  new Classes.Soccer.Soccer();
    }
}

足球课是这样的:

public class Soccer
{
    public static Mapping.Mapping Mappings { get; private set; }

    public Soccer()
    {
        Mappings = new Mapping.Mapping();
    }
}

Mapping 类只是另一个公共(public)空类。

当我将这个项目用作另一个项目中的引用时,我可以像这样访问我的对象

NewDataManager.Soccer.Mappings

很好,这就是我想要的。问题是,我可以像这样初始化引用项目中的所有类

var s = new Soccer();
var m = new Mapping();

我希望这些类只能通过我的 NewDataManager 类访问,使用我的库的项目不应该能够初始化类。

我该如何限制它?

最佳答案

要防止另一个程序集实例化一个类,使其构造函数成为internal:

public class Soccer
{
    public static Mapping.Mapping Mappings { get; private set; }

    internal Soccer()  //  <-- instead of 'public'
    {
        Mappings = new Mapping.Mapping();
    }
}

public class Mapping
{
    internal Mapping()
    {
    }
}

(顺便说一下,您似乎有名为 SoccerMapping 的命名空间。Don't do this.)

关于c# - 使类只能由静态对象访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28195271/

相关文章:

c# - 产生相同数据类型的另一个 Enumerable 的返回结果

c# - 使用 SQL 2000 和 ASP.NET C# 创建搜索引擎

c# - 将 44 位数字存储为 Int64 的 GetHashCode() 的最佳方法

c# - 跨平台项目结构

c# - 命令提示符未打开但在.Net中执行命令

c# - .NET : Clarification Request -Processing Threads

c# - 使用 .NET 4 的 ASP.NET 是否更快

java - 嵌套类不会更改封闭类字段

.net - ASP.NET MVC、ActionFilters、静态类和传递数据

c# - 类静态成员的奇怪行为——这怎么可能?