【问题标题】:Without private constructor we can access static member from one to other class? [duplicate]如果没有私有构造函数,我们可以从一个类访问静态成员吗​​? [复制]
【发布时间】:2018-08-25 19:23:29
【问题描述】:

使用私有构造函数: 它无法创建实例, 不能继承, 它只包含静态数据成员

如果没有私有构造函数,我也可以在分配值时使用其静态声明和静态数据成员访问类,如下例所示

class Test
{        
    public static int x = 12;
    public static int method()
    {
        return 13;
    }
}
class Program
{
    int resut1 = Test.x;
    int resut2 = Test.method();
    static void Main(string[] args)
    {
    }
}

所以我有以下疑问 为什么应该去私有构造函数 私有构造函数块有什么用 我们不能在私有构造函数块内做任何事情吗 执行时请解释清楚

提前致谢

【问题讨论】:

  • 你仍然可以在类中调用它。
  • 看来你的Test 类应该是static。我不清楚在您的示例中私有构造函数在哪里发挥作用。
  • 已经回答了这个帖子:stackoverflow.com/questions/2062560/…
  • 我将它与私有构造函数进行了比较。

标签: c#


【解决方案1】:

私有构造函数用于防止在没有实例字段或方法时创建类的实例,例如 Math 类,或者在调用方法来获取类的实例时。如果类中的所有方法都是静态的,请考虑将整个类设为静态。有关详细信息,请参阅静态类和静态类成员。

关注https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/private-constructors

【讨论】:

    【解决方案2】:

    私有构造函数阻止使用通用默认构造函数。

    通用默认构造函数允许实例​​化一个类;而私有构造函数。

    根据这个microsoft doc,它们通常用于防止人们实例化只有静态成员/函数的类。

    【讨论】:

    • 这是错误的,私有构造函数并不能完全阻止实例化类。它只是不能在类本身之外使用。
    • @BenVoigt 我的错,措辞不好。
    猜你喜欢
    • 2011-08-04
    • 2017-06-04
    • 2014-06-13
    • 2017-04-04
    • 2016-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-31
    相关资源
    最近更新 更多