C# 为什么尽管有私有构造函数,但它在MSDN中的类中使用了SEALED

C# 为什么尽管有私有构造函数,但它在MSDN中的类中使用了SEALED,c#,asp.net,.net,singleton,C#,Asp.net,.net,Singleton,我只是在学习有关Singleton的知识,以加深对这方面的了解 我遇到过MSDN,它使用SEALED,并声称我们无法进一步派生,因此当我们的目标是单例时,无法创建dervied的实例。我同意 然而,我看到已经有了一个私有构造函数来防止派生,就像我在VS中尝试它时一样,它说由于保护级别的原因无法访问,这很公平。所以我觉得这本身就解决了禁止派生的目的。为什么要密封?为什么特别是在文档中,他们写道Sealed是用来实现这一点的,而他们并没有为此目的提到私有构造函数 我真的很好奇,因为我在学习曲线。请帮

我只是在学习有关Singleton的知识,以加深对这方面的了解

我遇到过MSDN,它使用SEALED,并声称我们无法进一步派生,因此当我们的目标是单例时,无法创建dervied的实例。我同意

然而,我看到已经有了一个私有构造函数来防止派生,就像我在VS中尝试它时一样,它说由于保护级别的原因无法访问,这很公平。所以我觉得这本身就解决了禁止派生的目的。为什么要密封?为什么特别是在文档中,他们写道Sealed是用来实现这一点的,而他们并没有为此目的提到私有构造函数

我真的很好奇,因为我在学习曲线。请帮忙

这是MSDN文章的内容:

public sealed class Singleton
{
   private static readonly Singleton instance = new Singleton();

   private Singleton(){}

   public static Singleton Instance
   {
      get 
      {
         return instance; 
      }
   }
}
我所指的网站是:


因为如果使用嵌套类,可以从父类继承并提供如下公共构造函数

public class Parent 
{
    private Parent(){}

    public class Child : Parent
    {
        public Child() {}
    }
}
现在你可以这样做了

var child = new Parent.Child();

这打破了单身模式。添加
sealed
修饰符可以防止出现这种情况。

因为如果使用嵌套类,则可以从父类继承,并提供如下公共构造函数

public class Parent 
{
    private Parent(){}

    public class Child : Parent
    {
        public Child() {}
    }
}
现在你可以这样做了

var child = new Parent.Child();

这打破了单身模式。添加
sealed
修饰符可以防止出现这种情况。

Shoe,非常感谢,很公平,但是为什么我还要在实现Singleton的类中编写子类呢?有没有任何实时场景可以让我从这种编码风格中获益?否则我完全同意你。请帮助我,只是好奇并进行积极的讨论:)你可能不会,但与你一起工作的开发人员可能会,因为他不明白为什么不应该。谢谢:)一个小问题;为什么他们在这里使用只读?虽然我知道readonly的含义,但我不明白他们为什么要在这里使用它,还是我们不能使用相同的代码而不在这里使用readonly来实现singleton?readonly防止实例从类本身的任何位置重新分配,除了从静态构造函数中。@VictorMukherjee:Mate,这里没有静态构造函数。为了帮助您理解我的问题,当我删除READONLY时,它的行为仍然相同。为什么在这里是只读的?Shoe,非常感谢,很公平,但是为什么我还要在实现Singleton的类中编写一个子类呢?有没有任何实时场景可以让我从这种编码风格中获益?否则我完全同意你。请帮助我,只是好奇并进行积极的讨论:)你可能不会,但与你一起工作的开发人员可能会,因为他不明白为什么不应该。谢谢:)一个小问题;为什么他们在这里使用只读?虽然我知道readonly的含义,但我不明白他们为什么要在这里使用它,还是我们不能使用相同的代码而不在这里使用readonly来实现singleton?readonly防止实例从类本身的任何位置重新分配,除了从静态构造函数中。@VictorMukherjee:Mate,这里没有静态构造函数。为了帮助您理解我的问题,当我删除READONLY时,它的行为仍然相同。为什么在这里只读?