C#为什么/何时(不是如何)我们想在自己内部创建类的实例?

时间:2017-11-03 12:33:02

标签: c# visual-studio class oop

我是OOP的新手,我只是用C#开始冒险。我最近遇到了一个关于StackOverflow的主题,有人问如何在类本身内部创建一个类的实例。

public class My_Class
 {
      My_Class new_class= new My_Class();
 }

我的问题是为什么我们想做这样的事情?我尝试在论坛上进行一些搜索,但大多数讨论似乎都是关于如何创建无限循环等。

一个简单的例子将非常受欢迎(或者可能是关于谷歌的短语的建议)

5 个答案:

答案 0 :(得分:1)

好的,一个简单的例子:

class Human 
{ 
    Human Father { get; set; } 
    Human Mother { get; set; } 
}
另一个:

class Employee
{
    Employee Manager { get; set; }
}

您将类型与该类型的实例混淆。实例可以有不同的含义。

另一个着名的例子是singletons,用于存储一个不会公开的类型的实例,并用于所有静态方法或属性。

public class Singleton
{
   private static Singleton instance;

   private Singleton() {}

   public static Singleton Instance
   {
      get 
      {
         if (instance == null)
         {
            instance = new Singleton();
         }
         return instance;
      }
   }
}

答案 1 :(得分:0)

您希望在同一个类中包含实例的一个示例是链表结构。每个节点都有一个前一个实例和下一个实例:

public class Node 
{
    Node next;
    Node previous;

    //...
}

答案 2 :(得分:0)

最有可能的是,这是描述Singleton模式,其中您的程序只有一个类的实例。在这种情况下,您倾向于从该类中实例化该类本身的单个实例。

// naive implementation of singleton, but demostrates the basics
public class Singleton
{
    private static Singleton instance;
    static Singleton()
    {
         this.instance = new Singleton();
    }

    public static Singleton Instance{ get { return instance; } }
    private Singleton() {}

    public void DoSomething() { ... }
}

使用

Singleton.Instance.DoSomething();

答案 3 :(得分:0)

在实施Singleton design pattern的变体时,您通常会执行此操作。但是显然比你在问题中发布的内容涉及更多的代码。

此外;不,这不会创建一个无限循环。如果你无条件地在同一个类的构造函数中构造一个类的新实例,它将创建一个StackOverflowException。或者作为该字段的默认值。

答案 4 :(得分:0)

许多答案已经回答了"如何"你的问题的一部分,所以我只回答"为什么"就大多数答案所提到的单身设计模式而言:

  

我的问题是为什么我们想做这样的事情?

有时一个班级只有一个实例很重要。例如,在系统中应该只有一个窗口管理器(或只有一个文件系统或只有一个打印假脱机程序)。通常,单身人士用于集中管理内部或外部资源,并为他们自己提供全球访问点。 - source